2012-08-14 52 views
1

問題可能很明顯,但我仍然無法找到適當的解決方案。PlayFramework嚴格路線和ajax

讓我們假設有一個只有一個方法控制器:

class MyController extends Controller { 
    public static Result sum(int op1, int op2) { 
     return ok(op1 + op2); 
    } 
} 

路由文件是很簡單的太:

@controllers.routes.MyController.sum(1, 2) 
:從模板

GET /sum controllers.MyController.sum(op1: Integer, op2: Integer) 

好了,現在我可以做電

將被翻譯成

localhost:9000/sum?op1=1&op2=2 

,或直接粘貼到瀏覽器中。這工作很好。

但是,當我決定使用ajax來做這件事時,一切都變糟糕了。 我不是js-guru,所以我寫小(我認爲不好)使用jQuery的對象,它將onClick處理程序添加到按鈕。那就是:

entityController.setSumURL = function(sumURL) { 
    this.sumURL = sumURL; 
} 

entityController.bindSumButton = function(buttonId, op1, op2) { 
    $.get(entityController.sumURL, {op1: op1, op2, op2}, function(){ 
     alert("Done!"); 
    }); 
} 

其中entityController.sumURL應該是網址/數總和法。 通常當我渲染頁面視圖我寫的是這樣的:

@() 
.... 
entityController.setSumURL("@controllers.routes.MyController.sum()") 
.... 

但我不能這樣做,因爲和方法強制性的參數,也沒有辦法讓地址僅僅是因爲綁定的URL可以依靠傳遞給函數指標的影響在路線中定義。

所以問題是如何從沒有參數的url獲得路徑,或者如何重新組織整個過程以避免這種情況?

我的解決方案是從路徑中出現的函數中刪除參數,並直接從請求中查詢它們,但是我的項目正在增長,有時很難理解哪些參數傳遞給方法。

回答

2

查看zen tasks示例應用程序。

特別是:

您可能要編譯這個程序,並期待引用在輸出JavaScript而不是咖啡腳本,如果你不熟悉咖啡腳本。

另外,如果你正在使用AJAX重新加載頁面的部分,你可能想使用

$('.somePermanentContainer').on('click', 'selectorForClickable', function()...) 

否則你會發現它不再綁定綁定您的jQuery的時候DOM的一部分被重新加載。