Grails:将文件从资产文件夹渲染到 GSP



我在Grails项目中使用require.js。有几个单独的 JavaScript 文件包含用 define 定义的 require.js 模块。

还有一个 *.gsp 文件,它生成 require.js 配置和以 require() 开头的入口点,因为有一些动态配置要生成。它看起来像这样:

<%@ page contentType="application/javascript;charset=UTF-8" %>
require(['a', 'b'], function(a, b){
    ...
    var a = ${controllerPropertyA};
    ...
    some functions        
    ...
});

在我的布局中,我集成了require.js如下所示:

<script data-main='http://example.com/exampleController/dynamicGenerateMethod?domain=xyz.com' src='http://example.com/assets/require.js'></script>

所有模块 a、b 等都是按 require.js 异步加载的。现在我想将它们捆绑到一个文件中 - 我可以使用require.js优化工具,但我更喜欢使用资产管道。这在某种程度上是我将所有模块捆绑到一个optimized-modules.js中,该http://example.com/assets/optimized-modules.js上可用。

问题:我想在动态渲染的GSP文件中拥有优化的JavaScript代码。那么如何将优化的模块.js文件注入到我正在动态渲染的 GSP 中呢?我已经考虑过在标签库中定义的标签,以便我的 *.gsp 看起来像

<%@ 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        
    ...
});

标签定义以某种方式是这样的:

    def g:renderFile = { attrs, body ->
        def filePath = attrs.file
        if (!filePath) {
            throwTagError("'file' attribute must be provided")
        }
        //out << filePath
        out << request.servletContext.getResource(filePath).file
        //out << grailsResourceLocator.findResourceForURI(filePath).file.text
        //out << grailsApplication.mainContext.getResource(filePath).file.text
        //out << Holders.getServletContext().getResource(filePath).getContent()
        //IOUtils.copy(request.servletContext.getResourceAsStream(filePath), out);
    }

但是我无法获得缩小的优化模块的内容.js这是由启动时的资产管道插件完成的。对此有什么想法吗?

好吧,我终于自己发现了:

我没有使用grailsResourceLocator我不得不使用assetResourceLocator,如果您尝试访问资产资源,这是要走的路。

我的标签定义现在如下所示:

    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 中 - 完美!

相关内容

  • 没有找到相关文章

最新更新