Play Framework模板实际上是一个JS文件

时间:2014-11-05 00:13:37

标签: javascript scala playframework

我希望有一个JS文件的Play模板(而不是在HTML模板中包含<script>标签)。这样做的原因是可以缓存脚本。但是,我需要根据脚本的位置创建脚本中的差异,并希望通过Play模板系统实现此目的。如果我使用嵌入式脚本,我已经可以这样做,但那些不能被缓存。

我发现an existing question也问同样的事情,但答案完全不同(不同的目标)。

1 个答案:

答案 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>

修改:@See also samples for other templates types