6

これがどのように行われるのかわかりません。使用しようとしているルートをハードコーディングすることはできますが、これを正しい方法で実行したいと思います。

変更時に新しいページをロードする必要があるドロップダウンがあります。これが基本的に私がそれをやろうとしている方法です(私はこれのいくつかのバリエーションを試しました):

@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>

これにより、identifier expected but 'val' found例外が発生します。また、引用符で囲んでみましたが、[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)
4

1 に答える 1

6

ページにすべてのURLを保存する方法が必要です。

<option value="@routes.Accounts.transactions(id)">Display</option>

次に、onChangeで、次のことができます。

$("select[name='product']").change(function() {
  location.href = $(this).val();
});
于 2012-05-23T17:21:15.463 に答える