我在Grails项目中使用require.js。有几个单独的JavaScript文件包含使用transform: translateZ(0);
定义的require.js模块。
还有一个* .gsp文件,它生成require.js配置和以define
开头的入口点,因为有一些动态配置要生成。它看起来像这样:
require()
在我的布局中,我整合了如下所示的require.js:
<%@ page contentType="application/javascript;charset=UTF-8" %>
require(['a', 'b'], function(a, b){
...
var a = ${controllerPropertyA};
...
some functions
...
});
所有模块a,b等都由require.js异步加载。现在我想将它们捆绑到一个文件中 - 我可以使用require.js优化工具,但我更喜欢使用assets-pipeline。这有效,因为我将所有模块捆绑在一个<script data-main='http://example.com/exampleController/dynamicGenerateMethod?domain=xyz.com' src='http://example.com/assets/require.js'></script>
optimized-modules.js
上。
问题:我希望在动态呈现的GSP文件中包含优化的JavaScript代码。那么如何将optimize-modules.js文件注入到我动态渲染的GSP中呢?我已经考虑过在标记库中定义的标记,以便我的* .gsp看起来像
http://example.com/assets/optimized-modules.js
和标签定义有点像:
<%@ page contentType="application/javascript;charset=UTF-8" %>
<g:renderFile file="/assets/optimized-modules.js" />
require(['a', 'b'], function(a, b){
...
var a = ${controllerPropertyA};
...
some functions
...
});
但是我无法获得在启动时由assets-pipeline插件完成的minified optimized-modules.js的内容。有什么想法吗?
答案 0 :(得分:1)
好的,我终于自己找到了它:
如果您尝试访问资产资源,我必须使用assetResourceLocator,而不是使用grailsResourceLocator
。
我的标签定义现在看起来像:
def renderFile = { attrs, body ->
def filePath = attrs.file
if (!filePath) {
throwTagError("'file' attribute must be provided")
}
ServletContextResource bar = (ServletContextResource)assetResourceLocator.findAssetForURI(filePath)
String fileAsPlainString = bar.getFile().getText("UTF-8")
out << fileAsPlainString
}
这样我可以将编译资源javascript文件注入我的GSP - 完美!