2012-06-04 87 views
3

我有一个菜单,我想根据当前在系统中选择哪个帐户而有所不同。传递选择的选定值以形成动作

我有一个页面,允许用户从html选择一个帐户。当用户从帐户选择页面提交表单时,我想调用控制器上的菜单方法传入所选值,以便我的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) 

如何从我的选择参考选择的值(id =“accountNames”)并将其传递到我的表单动作?

+0

所以,你只是想简单地选择在改变后你会被重定向到某个页面,而没有其他的形式?这可以用简单的JS完成。 – biesior

+0

我原本是在JS中完成这项工作的,但JS并没有产生编译错误,也没有提供我期望从Play中获得的静态类型。 – rancidfishbreath

回答

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); 
}) 

通知我们如何在控制器中使用playRoutes两者(1)和JS调用之前(4 )。

+0

哟,这有效吗?想知道你是否需要更多帮助?欢呼声 –

+0

非常感谢您的帮助。我花了一段时间才实施,但这正是我所期待的。它很棒! – rancidfishbreath

相关问题