2009-06-20 83 views
3

我想將我在Grails中的視圖分割爲2個文件,一個.gsp文件和一個.js文件,以便從我的視圖中獲得更清晰的Javascript分離。所以這裏有一個例子:Grails:視圖文件夾中的Javascript文件

views/index.gsp 
views/index.js 
views/home/index.jsp 
views/home/index.js 

但當我只需添加index.js腳本引用這樣的:

<script src="index.js" type="text/javascript"></script> 

我得到的是一個404

有誰知道如何處理有了這個?

一個很大的好處是能夠使用index.js文件中的視圖數據來產生所需的內容。

Matthias。

回答

4

實際上,應該完全可以從您的grails-app/views/目錄中將JS文件(或任何其他文件類型)作爲GSP服務。你所要做的唯一事情,就是定義這些GSP的合適的URL映射,如:

"/javascript/home/index"(view:'/home/index.js') 

有了這個URL映射,你可以把你的JS代碼到grails-app/views/home/index.js.gsp(注意結尾.gsp),你可以在JS源代碼中使用任何grails標籤。爲確保您的JS以正確的內容類型提供,您可能需要在您的GSP開始處放置

<%@ page contentType="text/javascript"%> 

不幸的是,createLink標籤不支持將鏈接重寫到視圖,但應該很容易編寫自己的標籤來創建這些鏈接。

不管怎樣,請記住,這不會對您的應用的性能產生非常積極的影響。例如,在將動態內容作爲參數傳遞給JS函數時,通常會使用靜態JS文件(並將它們作爲靜態資源)。這也會讓你避免一些頭痛的問題。緩存等

0

更新2:

的Grails提供掛鉤到使用custom events構建生命週期的可能性。

可以編寫一個事件處理程序,它將grails-app/views下的所有javascript文件與web-app/js的目標文件夾同步。

將自定義代碼置於$ PROJECT/scripts/Events.groovy中。 PackagingEnd是調用的好目標,因爲它在web.xml生成後立即發生。

eventPackagingEnd = { -> 
    // for each js file under grails-app/views move to web-app/js 
} 

更新

如果你想簡單的 '網狀' 在一起的JavaScript文件,你可以做,使用符號連接,如:

的grails-app /視圖/ view1/index.js - > webapp/js/view1/index.js

據我所知,沒有辦法迫使grails直接提供web-a以外的內容第

另外,你可以內聯你的JavaScript,但這可能會有性能影響。


Javascript文件屬於web-app/js

然後你可以使用<g:javascript src="index.js" />來引用它們。

+0

是的,...我有點害怕有人會這麼說。從我的角度來看,這正是我想避免的。我討厭這樣說,但是在應用程序的兩個相距很遠的地方看到相同的觀點,但這些觀點並不真正融合在一起並沒有什麼幫助。 那麼..其他想法? – 2009-06-20 20:03:04

+0

在答案中查看我的更新。 – 2009-06-20 20:07:01

0

這個想法很好,但Grails有這個目錄結構的原因。視圖文件夾是爲特定的工件類型(視圖)..

你可以克隆你的視圖文件夾結構下web-inf,但是這給你更多的工作,因爲我猜這背後的想法是保持相關文件關閉一起出於方便的原因。

儘管我並不興趣將Javascript與視圖一起存儲,但我仍然喜歡Robert使用構建事件將JavaScript源代碼複製到正確的目錄中的構建過程。如果你決定沿着這條路走下去,那麼你可能會壓縮來源。 ShrinkSafe是流行的圖書館。

0

我不認爲你被允許訪問JS裏面的意見/

,如果你需要做的......這裏是招

  1. 創建JS和與myjs將其重命名.gsp(使用 「」) iniside _myjs.gsp類型你的js
......寫下你在這裏JS ...
  • 內部你GSP(例如:index.gsp中,view.gsp等) 類型該標籤上載你js的
  • 相關問題