【问题标题】:Javascript Routing in play Framework not working播放框架中的Javascript路由不起作用
【发布时间】:2016-08-22 11:59:37
【问题描述】:

当我使用 Play Framework 的 Javascript Routing 时,我的应用程序遇到了一个奇怪的问题。这就是问题所在:

Screenshot

这是我的代码:

    class Application extends Controller {

      import play.api.mvc._
      import play.api.routing._

      def javascriptRoutes = Action { implicit request =>
        Ok(
          JavaScriptReverseRouter("jsRoutes")(routes.javascript.ProcessController.retrieveAllProcess)
        ).as("text/javascript")
      }
    }

这是很多路由文件:

    GET  /javascriptRoutes  controllers.Application.javascriptRoutes
    GET /Process/All        controllers.ProcessController.retrieveAllProcess

这是 html.scala 文件:

    var option =
        {   "url" : @routes.javascript.ProcessController.retrieveAllProcess,
         ...
       }

非常感谢:)。

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

    我认为您将 javascript 路由与反向路由混淆了。

    Javascript 路由

    Javascript 路由旨在生成 javascript 代码。生成的代码定义了可在您的 javascript 中用于在客户端生成 url 的函数。由于您已经定义了一个返回生成代码的操作,因此您可以使用

    将其包含在您的页面中
    <script type="text/javascript" src="@routes.Application.retrieveAllProcess()"></script>
    

    请注意,这使用反向路由来告诉 html 页面应该为脚本使用哪个 URL。 :)

    然后在您的 javascript 代码中可以像这样使用它

    var retrieveAllProcessRoute = jsRoutes.controllers.Application.retrieveAllProcess()
    

    生成包含Application::retrieveAllProcess 方法的HTTP 动词和url 的javascript 对象。

    反向路由

    反向路由用于生成scala代码。此代码用于在视图中生成 URL 或 Redirects 到服务器端的控制器方法。

    既然您谈论的是模板 (*.html.scala),那么您谈论的是服务器端。这意味着您应该使用 Play 的反向路由功能。下面我重写了你的 javascript 模板 sn-p 以使用反向路由:

    var option = {
      "url": @routes.Application.retrieveAllProcess,
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多