Смешивание JavaScript и Scala в шаблоне Play

Я не знаю, как это делается. Я мог бы жестко закодировать маршрут, который пытаюсь использовать, но я хотел бы сделать это правильно.

У меня есть раскрывающийся список, в котором нужно загрузить новую страницу. Вот как я пытаюсь это сделать (я пробовал несколько вариантов этого):

@getRoute(value: String) = @{
    routes.Accounts.transactions(Long.valueOf(value))
}

    <script type="text/javascript">
      $(function() {

        $("select[name='product']").change(function() {

          location.href = @getRoute($(this).val());
        }).focus();

        $('a.view.summary').attr('href', "@routes.Accounts.index()" + "?selectedAccountKey=" + $('select[name=product]').val());
      });
    </script>

Получается ожидаемый идентификатор , но 'val ' найдено исключение. Я также пытался заключить его в кавычки, но это вызывает [NumberFormatException: For input string: "$(this).val()"]

Итак, как, черт возьми, мне вставить значение из JavaScript в Scala? функция?

Изменить

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

@(accountList: List[models.MemberAccount],
  selectedAccountKey: Long,
  urlGenerator: (Long) => Html
)

<select name="product">
  @for(account <- accountList) {
    @if(account.accountKey == selectedAccountKey) {
      <option selected="selected" value="@urlGenerator(account.accountKey)">@account.description (@account.startDate)</option>
    } else {
      <option value="@urlGenerator(account.accountKey)">@account.description (@account.startDate)</option>
    }
  }
</select>

<script type="text/javascript">
$(function() {
    $('select[name=product]').change(function() {
        location.href = $(this).val();
    });
});
</script>

Затем вы можете определить такую ​​​​функцию для передачи:

@transactionsUrl(memberAccountKey: Long) = {
  @routes.Accounts.transactions(memberAccountKey)
}

@accountsDropdown(transactionDetails.getMemberAccounts(), transactionDetails.getMemberAccountKey(), transactionsUrl)
6
задан Samo 31 May 2012 в 19:55
поделиться