根据系统当前选择的帐户,我想要一个菜单。
我有一个页面,允许用户从html选择中选择一个帐户。当用户从帐户选择页面提交表单时,我想在控制器上调用菜单方法传递所选值,以便我的网址看起来正确。
以下是页面中允许用户选择帐户的现有模板:
@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”)中引用所选值并将其传递给我的表单操作?
答案 0 :(得分:4)
实际上我认为你这样做是错误的。
如果表单的操作必须改变使用'select',则必须使用JS完成。
因此,当提交表单(事件submit
)时,您必须更新网址。
使用javascriptRoutes
可以轻松完成此操作。
所以你必须做几件事:
1 /创建javascriptRouter(假设您将其添加到Application.scala
)
def javascriptRoutes = Action {
Ok(
Routes.javascriptRouter("playRoutes")(
//accounts
controllers.routes.javascript.Accounts.menu
)
).as("text/javascript")
}
2 /在routes
文件中定义
# Javascript routing
GET /assets/javascripts/routes controllers.Application.javascriptRoutes
3 /在视图中添加相关的javascript文件导入,例如在main.scala.html
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
4 /在表单中添加submit
处理程序,在执行默认行为
$("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);
})
注意我们如何在控制器(1)和JS调用(4)中使用playRoutes
。