包括页面特定资产

时间:2015-04-07 22:43:57

标签: javascript grails asset-pipeline

使用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标题中:

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

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

1 个答案:

答案 0 :(得分: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>