3

システムで現在選択されているアカウントに基づいて異なるメニューを用意しています。

ユーザーがhtml選択からアカウントを選択できるページがあります。ユーザーがアカウント選択ページからフォームを送信すると、コントローラーの menu メソッドを呼び出して、選択した値を渡して、URL が正しく見えるようにします。

ユーザーがアカウントを選択できるページの既存のテンプレートを次に示します。

@helper.form(action = routes.Accounts.menu {
    <table>
        <tr>
            <td><select id="accountNames">
                @accountNames.map { name =>
                    <option value="@name">@name</option>
                }
            </select></td>
        </tr>
        <tr>
            <td>
                <p>
                    <input type="submit" value="Choose">
                </p>
            </td>
        </tr>
    </table>
}

私のルートファイルから:

GET /account/:accountName/menu controllers.Accounts.menu(accountName: String)

select (id="accountNames") から選択した値を参照し、それをフォーム アクションに渡すにはどうすればよいですか?

4

1 に答える 1

4

実際、あなたはそれをするのが間違っていると思います。

フォームのアクションが「選択」の使用を変更する必要がある場合は、JS を使用して行う必要があります。そのため、フォームが送信されたとき (イベントsubmit)、URL を更新する必要があります。

これは、 を使用して簡単に実行できますjavascriptRoutes

したがって、いくつかのことを行う必要があります。

1/ javascriptRouter を作成します (追加すると仮定しますApplication.scala)

def javascriptRoutes = Action {
  Ok(
    Routes.javascriptRouter("playRoutes")(
      //accounts
      controllers.routes.javascript.Accounts.menu
    )
  ).as("text/javascript")
 }

routes2/ファイルで定義する

# Javascript routing
GET     /assets/javascripts/routes      controllers.Application.javascriptRoutes

3/ ビューに関連する JavaScript ファイルのインポートを追加します。main.scala.html

<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>

submit4/デフォルトの動作を実行する前にそれを行うハンドラーをフォームに追加します

$("form").submit(function () {
    //this computes the correct URL giving a parameter which is the value of the selected option
    var newURl = playRoutes.controllers.Accounts.menu($("#accountNames").val()).url
    $(this).attr("action", newUrl); 
})

playRoutesコントローラー (1) と JS 呼び出し (4) の両方でどのように使用したかに注目してください。

于 2012-06-04T13:07:38.893 に答える