【问题标题】:Can't get javascriptRoutes to work with Play Framework 2无法让 javascriptRoutes 与 Play Framework 2 一起使用
【发布时间】:2014-08-20 02:36:03
【问题描述】:

我正在尝试在 Play 2 (Scala) 中使用 javascriptRoutes,但出现错误(见下文)。这是我所做的:

javascriptRoutes方法添加到Application控制器

def javascriptRoutes = Action { implicit request =>
    import routes.javascript._
    Ok(Routes.javascriptRouter("jsRoutes")(Orders.searchProducts))
        .as("text/javascript")
}

添加路由到routes文件

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

添加<script>导入到main.scala.html

<head>
...
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
...
</head>

进行这些更改后,我在 JavaScript 控制台中收到以下错误:

GET http://localhost:9000/assets/javascripts/routes 404 (Not Found)
Uncaught ReferenceError: jsRoutes is not defined

我错过了什么?

【问题讨论】:

  • 所以代码可以编译,但只有在您尝试使用 Orders.searchProducts 后才会看到错误?检查了您的代码并为我工作,您是否正在玩玩玩〜运行?
  • 是的,代码可以编译,我在 chrome dev 的控制台中看到了这些错误。工具,而不是在我尝试使用 Orders.searchProducts 时,而只是在我包含 &lt;script type="text/javascript" src="@routes.Application.javascriptRoutes"&gt;&lt;/script&gt; 的页面被加载时。我用玩跑不玩~跑.....
  • 嗯。好吧,这很奇怪,我使用 play 2.1.0 制作了新项目 - 复制并粘贴了您的代码行并使用 chrome 进行了测试,没问题 - 一切正常。
  • play ~run 背后的诀窍在于,它会在您每次保存文件时编译代码,尤其是当您更改它们可以工作的路线时。只是为了确保,关闭你的服务器,输入 play clean 然后播放 ~run (在命令行 ofc 中) - 如果这不起作用,我唯一想到的就是播放版本。
  • 我不知道你是否解决了你的问题,但我有同样的行为,这仅仅是因为 Javascript 路由是在我的静态资源路由之后定义的路线文件。

标签: ajax scala playframework-2.0 url-routing


【解决方案1】:

conf/routes 文件中的错误顺序可能会导致问题。

有个提示:

http://grokbase.com/t/gg/play-framework/1348rbs2vk/2-1-scala-javascript-router-404

一旦我根据提示调整了顺序:

将 javascript 路由器操作的路由定义移到 资产路线。

问题已解决。

    # Routes
    # This file defines all application routes (Higher priority routes first)
    # ~~~~

    GET     /                           controllers.MainController.index()
    GET     /message                    controllers.MessageController.getMessage()
    GET     /assets/javascripts/routes  controllers.MessageController.javascriptRoutes()

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

【讨论】:

  • +1 我在 Play 2 (Java) 应用程序中遇到了同样的问题,这为我解决了问题。
  • 嗨,谢谢。实际上对我来说,我不得不在 intellJ 中删除项目配置中的子模块构建项。见stackoverflow.com/questions/16676311/…
【解决方案2】:

与此同时,我发现了与此相关的其他帖子->

Unable to resolve reverse routing methods in IntelliJ

我必须从项目配置中删除一些信息才能使以下文件夹成为源路径的一部分 ->

文件 -> 项目结构

在右窗格中选择来源

添加源文件夹 目标/scala-XXX/classes_managed 目标/scala-XXX/src_managed/main

【讨论】:

    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2012-07-10
    相关资源
    最近更新 更多