播放框架javascript路由无法加载资源

时间:2015-04-12 15:39:25

标签: java javascript playframework playframework-2.3

我正在尝试在Play Framework应用中制作一些Javascript Rounting并遇到一些错误:

我有一个标识为#next的按钮,该按钮应使用Ajax将一些新图像和文本加载到名为#content的div中。

在我的Application.java中,我实现了以下两种方法:

public static Result nextUser(int i) {
    return ok(content.render(users.get(i)));
}

public static Result javascriptRoutes() {
    response().setContentType("text/javascript");
    return ok(
            Routes.javascriptRouter("jsRoutes",
                    controllers.routes.javascript.Application.nextUser()
            )
    );
}

制作此content.scala.html文件:

@(user: User)
<img id="user" src="@routes.Assets.at(user.getImg())" />
<h2>@user.getStatus()</h2>

将此添加到路线文件中:

GET        /nextuser                    controllers.Application.nextUser(i: Int)

GET        /assets/javascripts/routes   controllers.Application.javascriptRoutes()

然后尝试了这个Javascript代码:

<script type="text/javascript" src="@routes.Application.javascriptRoutes()"></script>
<script>
    var userIndex = 1;

    $("#next").click(function() {
        jsRoutes.controllers.Application.nextUser(userIndex).ajax({
        success : function(data) {
            $("#content").html(data);
        },
        error: function(err) {

        }
        });
    });

</script>

在javascriptRoutes方法的Application.java文件中,控制器。路由。无法找到。

有人知道导致错误的原因吗?

编辑:

由于这个原因,我可以解决初始错误: Unable to resolve reverse routing methods in IntelliJ

现在看起来像这样:

enter image description here

即使在明确定义的情况下也无法找到nextUser方法。

当我使用activator compile编译应用程序并使用activator run运行它时,我的chrome控制台如下所示:

http://i.gyazo.com/34581c81beda3520f927991c6a0c554f.png

所以路线文件仍然无法找到。

1 个答案:

答案 0 :(得分:0)

好的,我可以解决这个问题:

Can't get javascriptRoutes to work with Play Framework 2

问题是我的路线文件中的顺序。一旦我在javascript路由之前切换资产声明它就会起作用:

# Javascript Router
GET        /assets/javascripts/routes        controllers.Application.javascriptRoutes()

# Map static resources from the /public folder to the /assets URL path
GET        /assets/*file                controllers.Assets.at(path="/public", file)