2014-01-24 23 views
0

我使用Play框架,並試圖在另一個JavaScript文件中的函數中定義一個JavaScript文件(原因是我不希望這些函數可用在容器功能之外)。Play Framework - 在函數中定義我的Javascript文件

所以我有兩個JavaScript文件,./public/javascripts/main.js,./public/javascript/custom.js。

從我的html頁面(index.scala.html)我定義了這個原則:

<script src="@routes.Assets.at("javascripts/main.js")"></script> 

使用 「@routes ......」 在main.js不工作,所以我嘗試添加如下:

$.getScript("public/javascripts/custom.js", function(){ 
     alert("Script loaded and executed."); 
    }); 

我試過了各種路徑,但它總是說它找不到它。

任何想法如何在Play中做到這一點?通過儘可能多的文件查看盡可能多的文件,沒有什麼是...

任何幫助將輝煌!

謝謝。

親切的問候,

加里Shergill

回答

1

嘗試使用Javascript路由機制。如上所述here

定義javascriptRoutes

import play.api.mvc._ 
    object Application extends Controller { 

    def javascriptRoutes = Action { implicit request => 
     import routes.javascript._ 
     Ok(
     Routes.javascriptRouter("jsRoutes")(
      javascript.Assets.at  
     ) 
    ).as("text/javascript") 
    } 
    } 

更新您的.routes文件

GET /routes controllers.Application.javascriptRoutes 

其包含到頁面:

<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script> 

然後用jsRoutes變量在JavaScript:

$.getScript(jsRoutes.controllers.Assets.at('javascripts/custom.js').url, function(){ 
    alert("Script loaded and executed."); 
}); 
+0

我不完全理解這方面的文檔。 我需要將def javascriptRoutes添加到Application.java中,但接下來我要爲這個路徑文件添加什麼?或者那是錯的? – Gary

+0

@gary我已經更新了答案,可能有幫助。 –

+0

謝謝你清理它=)太棒了 – Gary

4

請確保您有以下聲明,你的路由文件:

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.at(path="/public", file) 

然後下面應該工作:

$.getScript("/assets/javascripts/custom.js", function(){ 
    alert("Script loaded and executed."); 
}); 
+0

這將返回以下: GET HTTP://本地主機:9000 /資產/ JavaScript的/ custom.js _ = 1390575856602 \t 404未找到 – Gary

+0

哪個目錄包含您的js文件? 'javascript'或'javascripts'?返回404的路徑正在查看'javascript'(單數)。是對的嗎? – mantithetical

+0

好點......我似乎在輸入時錯過了「s」。謝謝! – Gary