我想有一個播放模板是一個JS文件(而不是有一個HTML模板中的<script>
標籤)。這樣做的原因是腳本可以被緩存。但是,我需要在腳本中創建差異,具體取決於它包含的位置,並希望通過Play的模板系統執行此操作。如果我使用嵌入式腳本,我已經可以這樣做了,但是這些腳本不能被緩存。玩框架模板,實際上是一個JS文件
我發現an existing question也要求同樣的事情,但答案是完全不同的(不同的目標)。
我想有一個播放模板是一個JS文件(而不是有一個HTML模板中的<script>
標籤)。這樣做的原因是腳本可以被緩存。但是,我需要在腳本中創建差異,具體取決於它包含的位置,並希望通過Play的模板系統執行此操作。如果我使用嵌入式腳本,我已經可以這樣做了,但是這些腳本不能被緩存。玩框架模板,實際上是一個JS文件
我發現an existing question也要求同樣的事情,但答案是完全不同的(不同的目標)。
這很簡單,只是...創建視圖與.js
擴展,即:views/myDynamicScript.scala.js
:
def myDynamicScript = Action {
Ok(views.js.myDynamicScript.render(Hello Scala!")).as("text/javascript utf-8")
}
或:
@(message: String)
alert('@message');
//Rest of your javascript...
所以,你可以用斯卡拉行動使它Java action:
public static Result myDynamicScript() {
return ok(views.js.myDynamicScript.render("Hello Java!"));
}
創建route
到你的行動(可能你會想一些PARAMS添加到它):
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>
我討厭這聽起來像一個「我也是」謝謝,但是,這實際上解決了一個**完全不同的問題**我玩的SBT子模塊設置與靜態資產。我現在不再需要解決這個問題了,因爲這是我需要解決的挑戰。所以謝謝 :) – Techmag 2015-11-18 15:55:48
您可以定義JavaScript文件的播放模板。就像你爲html模板做的一樣。您只需添加模板並從控制器中渲染它並添加路由。但總是有比創建動態JavaScript更好的方法。至於緩存,如果您創建一個正常的JavaScript文件並通過播放進行播放,該怎麼辦?你認爲它不會被緩存?爲什麼? – 2014-11-05 06:17:37
@NaderHadjiGhanbari,我沒有說一個正常的JS文件不會被緩存。相反,我需要能夠使用Play將數據替換爲文件並提供實際的JS文件,而不是嵌入的JS代碼(在HTML中)。 – Mike 2014-11-06 17:16:20