【问题标题】:Play framework and javascript Assets routerPlay 框架和 javascript 资产路由器
【发布时间】:2015-04-23 02:14:17
【问题描述】:

我正在使用带有 Scala 的 Play 2 框架。

我想在我的 Javascript 中使用 @routes.Assets.at(...) 来获取我的资产的路径。但是框架不会编译assets目录下的内容。

有可能吗?还是有其他选择?

【问题讨论】:

标签: javascript playframework


【解决方案1】:

我的解决方案:

# in the controller, Scala code
def jsRouterGen = Action {
  Ok(
    Routes.javascriptRouter("jsRouter")(
     routes.javascript.Assets.at // IntelliJ will tell you this is wrong, but it you are right :)
    )
  ).as("text/javascript")
}

# in html template
# add in <head>
<script src='@routes.Application.jsRouterGen'></script>
<!-- other js that needs this router come after -->

# in your js
jsRouter.controllers.Assets.at('/use/it/like/in/html/template');

注意这两对:

  • jsRouterGen:这定义了 js 路由器代码
  • jsRouter:这是您将在 js 代码中使用的路由器的名称

根据需要更改它们,但要确保它们匹配。

【讨论】:

    【解决方案2】:

    assets 目录下的 JavaScript 文件未编译,但查看 wchich 包含它!因此,您可以在包含 JS 之前声明全局 JS var,而不是在 JS 中使用此 var,例如:

    <script>
        var myPathToSomeAction = '@routes.MyController.myAction()';
        var someImgPath = '@routes.Assets.at("images/some-img.jpg")';
    </script>
    <script src='@routes.Assets.at("js/myscript.js")'></script>
    

    所以在你的 JS 中你可以使用它,例如:

     var imgMarkup = '<img src="' + someImgPath + '" alt="" />';
    

    【讨论】:

    • 谢谢,但这是解决此类问题的旧方法。创建客户端路由功能更可靠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多