Grails:将资源文件夹中的文件渲染到gsp中

时间:2015-11-17 16:58:36

标签: grails assets gsp pipeline inject

我在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的内容。有什么想法吗?

1 个答案:

答案 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 - 完美!