2012-06-04 52 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

相關問題