包括页面特定资产

Including Page Specific Assets

使用 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>

在views/store/index.gsp header:

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

虽然这行得通,但感觉像是黑客攻击。我必须这样做的原因是因为如果我只是尝试将资产包含在视图本身而不是布局中,它总是在 application.js 之前呈现,这意味着该脚本中依赖于全局代码将失败;例如需要 jQuery 的代码。

我通常使用一种约定来命名页面特定的 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>