2015-04-07 93 views
0

使用Grails asset-pipeline插件,我試圖找出在頁面中包含資產(javascript)與將其編譯到application.js文件中的最佳方式。目前,這是我在做什麼...包括頁面特定資產

在我的佈局文件的底部:

<g:set var="workflow" value="${pageProperty(name: 'meta.workflow')}"/> 
<asset:javascript src="application.js"/> 
<g:if test="${workflow == 'storeAdmin'}"> 
    <asset:javascript src="store/script.js"/> 
</g:if> 

在視圖/存儲/ index.gsp中標題:

<meta name="workflow" content="storeAdmin" /> 

這枚作品,感覺就像一個黑客。我必須這樣做的原因是因爲如果我簡單地嘗試將資源包含在視圖本身中而不是佈局中,它總是在application.js之前呈現,這意味着該腳本中依賴於全局代碼的任何內容將失敗;例如需要jQuery的代碼。

回答

1

我通常使用一個約定來命名頁面特定的JavaScript資產,它反映了控制器和操作的名稱。使用這些和<asset:assetPathExists>標籤,我可以將以下內容添加到我的佈局中:

<asset:assetPathExists src="${params?.controller ?: 'home'}_${params?.action ?: 'index'}.js"> 
    <asset:javascript src="${params?.controller ?: 'home'}_${params?.action ?: 'index'}.js" /> 
</asset:assetPathExists> 
+0

這並不壞。我仍然想知道是否有辦法直接在視圖中包含資源,而不是佈局文件。 – Gregg

+0

沒有任何理由不能做到這一點。事實上,我一直在使用jquery等的應用程序中這樣做。您可能需要重新排列資產如何在您的佈局中加載(例如,確保您在''之前加載全局資產清單。 –

+0

我在我的佈局的底部加載application.js,它允許對於更快的頁面加載,當包含其他javascript視圖時,它們會在佈局結束之前加載,所以我無法讓它們在加載之後加載。我不想移動我的全局清單:( – Gregg