播放框架和javascript资产路由器

时间:2015-04-23 02:14:18

标签: javascript playframework

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

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

有可能吗?或者任何其他选择?

2 个答案:

答案 0 :(得分: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代码中使用的此路由器的名称

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

答案 1 :(得分:0)

放置在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="" />';