2013-06-05 58 views
-2

PLAY框架相當新穎,並且由於我工作中的限制,我們使用的是1.2.5版本,而現在直到現在能夠使用從HTML到Controller的常規過程來完成我所有的過程通過表單提交。我想從JavaScript函數調用一個Application.Action。使用javascript調用一個動作

雖然我有一個輸入信息的表單,但可以單擊另一個非提交按鈕在單獨的頁面上獲取額外信息。我想通過「onClick」調用JavaScript函數,並在JavaScript函數中調用「@ Application.Action(某些參數...)」。

我需要在調用動作之前獲取特定輸入字段中的內容。

我試圖做一個PLAY「彈出」,但似乎不工作,因爲我不能傳遞參數。

所以這裏的片段我:

在HTML文件

(延伸誰擁有所有的JavaScript文件「包括」 main.html中的)

<form>.... 
     some input fields here 
     submit button here 
    </form> 

<button onclick="myFunction()" data-role="button" style="width: 5em">Click here</button> 

包含在JavaScript文件中main.html中我有這樣的事情

function myFunction() { 
    var inputField1 = document.getElementById('inputField1').value; 
    var inputField2 = document.getElementById('inputField2').value; 
    var inputField3 = document.getElementById('inputField3').value; 
    window.location = "@{Application.moreInfo(inputField1, inputField2, inputField3)}"; 
} 

當然不行

有沒有辦法像那樣做?

我必須爲此創建路線嗎?

我能夠通過更換

window.location = "@{Application.moreInfo(inputField1, inputField2, inputField3)}"; 

window.location.href='/goThere'; 

只要我有一個路線

/goThere Application.goThere 

達到一個單獨的頁面,但我不能想出一個方式來傳遞參數,我試圖設置路線如

/goThere/{inputField1}{inputField2}{inputField3} Application.goThere(inputField1...) 

但我想我也沒有正確的語法。

有沒有辦法調用一個Application.Action並從JavaScript函數中傳遞參數/字段。

任何幫助表示讚賞

+0

這不完全清楚你在問什麼。 – vdbuilder

+0

這一切都可以通過jQuery輕鬆完成。爲什麼你不想使用它? http://jsfiddle.net/L8duC/ –

+0

澄清:在使用表單控制器進程時,您有

...
我希望能夠點擊另一個按鈕 - onClick = myFunction()顯示不同的頁面,然後從該新頁面回調該操作@ {Application.doStuff(someParam)} - 因此您如何調用來自JavaScript函數的Application.Action – C623700

回答

0

內置#{jsAction /}模板標籤不正是你想要的。

例子:

假設你有一個路線

GET  /moreinfo/{foo}/{bar}  Application.moreInfo 

您可以使用jsAction結果與參數,以獲得正確的URL你想要的:

var fieldOne = "I'm a Javascript variable"; 
var fieldTwo = "Really? Me too"; 
var moreInfoAction = #{jsAction @Application.moreInfo(":foo", ":bar") /}; 

// and since it looks like you want to set the current location 
// to your freshly obtained URL: 
window.location.href = moreInfoAction({"foo": fieldOne, "bar": fieldTwo});