在 Playframework2 中,如何提供多个资产目录?

In Playframework2, how to serve multiple asset directory?

资源目录有两个,一个是/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")">

有没有人知道如何解决这个问题...

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

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)

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

我发现关键是给routes.Assets.at传入另一个参数,下面是来自playframeworkAsset 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")">