PlayFramework严格的路线和ajax

时间:2012-08-14 08:26:46

标签: ajax playframework-2.0

问题可能很明显,但我仍然找不到合适的解决办法。

让我们假设控制器只有一种方法:

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

路由文件也很简单:

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

好吧,现在我可以通过模板进行调用:

@controllers.routes.MyController.sum(1, 2)

将被翻译为

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应该是url到/ sum方法。 通常当我渲染页面视图时,我会写这样的东西:

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

但是我不能这样做,因为sum方法有强制参数,并且没有办法获取地址只是因为绑定的url可以依赖传递给路由中定义的函数的参数。

所以问题是如何只从没有参数的url获取路径,或者如何重新组织整个过程以避免这种情况?

我的解决方案是从路径中出现的函数中删除参数并直接从请求中查询它们,但我的项目正在增长,有时候很难理解哪些参数传递给方法。

1 个答案:

答案 0 :(得分:2)

查看zen tasks示例应用程序。

特别是:

如果你不熟悉coffeescript,你可能想要编译这个应用程序并查看输出javascript而不是coffeescript。

此外,如果您使用ajax重新加载页面的一部分,您可能希望使用

绑定您的jQuery
$('.somePermanentContainer').on('click', 'selectorForClickable', function()...) 

否则,当重新加载DOM的那部分时,你会发现它不再受限制。