Как добавить обработчик кнопок в фреймворк Scala Play?

Я использую scala play framework + scala template engine для внешнего интерфейса. Как добавить обработчик кнопки? Мне нужно вызвать какую-то функцию при нажатии на нее.

<body>
    <p>Database interface<br />
        <textarea style="margin: 0px; height: 193px; width: 533px;" cols="40" name="comment" rows="3"></textarea>
    </p>
    <p><input type="submit" value="Select" /> <input type="submit" value="Insert" />  <input type="submit" value="Update" /></p>
</body>

person Sergei Podlipaev    schedule 06.12.2016    source источник


Ответы (2)


Специальных обработчиков кнопок нет. Вы можете написать его на Javascript или простом HTML. Единственная хитрость заключается в том, чтобы получить ссылку на серверную функцию. Вы можете получить ссылку автоматически с помощью обратной маршрутизации.

Например, у вас есть маршрут

GET     /count                      controllers.CountController.count

Затем вы можете получить ссылку, вызвав controllers.routes.CountController.count в своем коде.

В шаблонизаторе ссылка:

<a href="@controllers.routes.CountController.count">Count</a>

Обычная HTML-кнопка:

<form action="@controllers.routes.CountController.count">
  <input type="submit" value="HTML only" />
</form>

Кнопка с Javascript:

<input type="submit" onclick="location.href='@controllers.routes.CountController.count';" value="Javascript" />

Если вам нужно что-то особенное на стороне клиента для обработки, вам нужно написать свой собственный код на Javascript.

person Andriy Kuba    schedule 06.12.2016
comment
Спасибо! Я думал, что в Twirl есть какой-то обработчик кнопок OOB. - person Sergei Podlipaev; 06.12.2016
comment
если бы @controllers.routes.CountController.count взял переменную, скажем, из текстовой области, как бы вы передали эту переменную? - person HaydenKai; 07.07.2017
comment
Вы не могли передать эту переменную. @controllers.routes.CountController.count обрабатывается на сервере, прежде чем вернуть HTML-код клиенту. Данные в textarea находятся на клиенте. - person Andriy Kuba; 07.07.2017