在Play Framework 2中,如何提供多个资产目录?

时间:2015-03-08 14:07:12

标签: scala playframework playframework-2.0 sbt assets

有两个资产目录,一个是/ui/dist,另一个是/public。我试着写这样的路线:

GET            /assets/*file                        controllers.Assets.at(path="/public", file)
GET     /ui/*file               controllers.Assets.at(path="/ui/dist", file)

但是编译时会抛出错误:

[error] Unspecified value parameter file.
[error]         <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">

有没有人有关于如何解决这个问题的想法......

2 个答案:

答案 0 :(得分:3)

我发现关键是将另一个参数传递给routes.Assets.at,以下内容来自playframework Asset document

GET  /javascripts/*file        Assets.at("public/javascripts", file)
GET  /images/*file             Assets.at("public/images", file)

然后,您需要在使用反向路由器时指定这两个参数:

<script src="@routes.Assets.at("public/javascripts", "jquery.js")"></script>
<image src="@routes.Assets.at("public/images", "logo.png")">

答案 1 :(得分:0)

尝试为每个路由器对象创建一个单独的路由器对象:

package controllers

object PublicAssets extends controllers.AssetsBuilder
object UiDistAssets extends controllers.AssetsBuilder

然后在你的路线中:

GET     /assets/*file   controllers.PublicAssets.at(path="/public", file)
GET     /ui/*file       controllers.UiDistAssets.at(path="/ui/dist", file)

我认为你的尝试中发生的事情是反向路由器为你的公共路由生成一个对象,然后另一个为ui路由同名的覆盖第一个路由(如果有人知道更准确,请纠正我。)解决方案应该是以不同的方式命名您的资产类别,因此生成的反向路由同样具有不同的名称(或者,可以将它们称为相同的东西,但将它们放在不同的包中。)