Clientlibs Qs如何排除一些js文件

时间:2015-02-01 15:43:23

标签: cq5 aem

我有类别为abc的clientlibs。它包含多个js文件,例如

abc
  |-->JS
  |    |--->a.js
  |    |--->b.js
  |    |--->c.js
  |-->js.txt[which have the paths of all three js files]

如果我使用类似:<cq:includeClientLib js="abc" />的内容。这包括我脚本中的所有js文件。但我怎么能限制只包括两个。这3个只是例子,可以有10个或更多。有没有人知道除了创建新的clientlib文件夹之外如何实现这一目标。

由于

3 个答案:

答案 0 :(得分:2)

您可以使用clientlibs的主题功能来实现此要求。它需要对clientlibs结构进行很少的修改。让我用三个js文件(a.js,b.js和c.js)解释它。

假设a.js和c.js一直不需要b.js。您必须使用a.js和c.js创建父clientlib。在同一个clientlib中创建一个主题文件夹并添加第二个clientlib与b.js [应该与父类具有相同的类别],结构应如下所示:

clientlibs: {
categories: [
    "themeParent"
],
jcr: primaryType: "cq:ClientLibraryFolder",
js: {
    jcr: primaryType: "nt:folder",
    a.js: {
        jcr: primaryType: "nt:file",
        jcr: content: {}
    },
    c.js: {
        jcr: primaryType: "nt:file",
        jcr: content: {}
    }
},
js.txt: {
    jcr: primaryType: "nt:file",
    jcr: content: {
        //a.js and c.js
    }
},
themes: {
    jcr: primaryType: "nt:folder",
    themeb: {
        categories: [
            "themeParent"
        ],
        jcr: primaryType: "cq:ClientLibraryFolder",
        js.txt: {
            jcr: primaryType: "nt:file",
            jcr: content: {
                //b.js
            }
        },
        b.js: {
            jcr: primaryType: "nt:file",
            jcr: content: {}
        }
    }
}
}

可以使用includeClientLib标记的themed标记为clientlib选择性地启用主题。

<cq:includeClientLib js="themeParent"/>:将包含a.js,c.js和b.js

<cq:includeClientLib js="themeParent" themed="false"/>:将包含a.js和c.js

<cq:includeClientLib js="themeParent" themed="true"/>:仅包含b.js

参考文献:How are themes applied in Adobe AEM?

答案 1 :(得分:0)

您可以删除&#39; js.txt&#39;中的js文件条目,js将出现在路径中,但不会作为cq:include

的一部分包含在内

答案 2 :(得分:0)

据我所知,这是不可能的。当您在JSP中编写此<cq:includeClientLib js="abc" />语句时,将包含您在js.txt中输入的任何js文件名。< / p>

所以说如果你想在另一个JSP中只包含两个JS文件而不创建新的clientlib,唯一的方法就是手动使用完整路径。

像这样

<script src="/etc/designs/projectname/clientlibs/js/a.js"></script>
<script src="/etc/designs/projectname/clientlibs/js/b.js"></script>