Grails Resources Plugin模块配置之外的参考资源

时间:2014-03-20 17:25:11

标签: grails module resources external

我需要加载外部(CMS提供的子模板)资产,其中CSS和JS最终位于顶部或底部,具体取决于文件类型或处置属性

查看这篇文章(Placement Of JS Resource Via <r:external />)我发现如果未在模块配置中定义CSS和JS,则无法在LayoutResources中放置它们。

在阅读资源插件代码之后,我想到了一个额外的标签,它可以动态创建模块,以便将它们附加到。这是一个快速原型,请不要判断质量:)

标签: <r:cmsExternal url="/c/test.css" />

背后的代码(从ResourceProcessor类中挑选):

def cmsExternal = { attrs ->
    String disposition = attrs.remove('disposition')
    String url = attrs.remove('url')

    // Creating adhoc module
    ResourceModule module = grailsResourceProcessor.getModule(url) as ResourceModule
    // Prevent creating the same module/resource twice
    if(!module) {
        grailsResourceProcessor.defineModule(url)
        module = grailsResourceProcessor.getModule(url) as ResourceModule

        grailsResourceProcessor.resourceInfo.addDeclaredResource {
            ResourceMeta resourceMeta = new ResourceMeta(id: url, sourceUrl: url, workDir: grailsResourceProcessor.getWorkDir(), module:module)
            grailsResourceProcessor.prepareResource(resourceMeta, true)
            resourceMeta.disposition = disposition == 'head' || resourceMeta.processedFileExtension == 'css' ? 'head' : 'defer'
            module.resources = [resourceMeta]
            resourceMeta
        }
    }


    // Rendering adhoc module
    r.require(module: url)
}

它确实运作良好,但我想知道是否有人有更好的想法/方法来做到这一点。

0 个答案:

没有答案