我希望有一个JS文件的Play模板(而不是在HTML模板中包含<script>
标签)。这样做的原因是可以缓存脚本。但是,我需要根据脚本的位置创建脚本中的差异,并希望通过Play模板系统实现此目的。如果我使用嵌入式脚本,我已经可以这样做,但那些不能被缓存。
我发现an existing question也问同样的事情,但答案完全不同(不同的目标)。
答案 0 :(得分:17)
这很容易,只是...创建.js
扩展名的视图,即:views/myDynamicScript.scala.js
:
@(message: String)
alert('@message');
//Rest of your javascript...
因此,您可以使用 Scala 操作将其呈现为:
def myDynamicScript = Action {
Ok(views.js.myDynamicScript.render(Hello Scala!")).as("text/javascript utf-8")
}
或 Java 操作:
public static Result myDynamicScript() {
return ok(views.js.myDynamicScript.render("Hello Java!"));
}
为您的操作创建route
(可能您需要为其添加一些参数):
GET /my-dynamic-script.js controllers.Application.myDynamicScript()
所以你可以把它包含在HTML templite中,就像:
<script type='text/javascript' src='@routes.Application.myDynamicScript()'></script>
可选:
您还可以将脚本渲染到HTML文档中,即将其放入<head>...</head>
部分:
<script type='text/javascript'>
@Html(views.js.myDynamicScript.render("Find me in the head section of HTML doc!").toString())
</script>