cq:AEM中的includeClientLib,如果包含在组件jsp中,则组件在页面上出现两次

时间:2017-07-17 22:54:14

标签: aem sightly

如果我们在组件jsp中提供cq:includeClientLib,并且如果我们在该页面上拖放组件两次,那么clientlib会被加载/包含两次吗?

如果我们以明显的方式进行会是什么情况(data-sly-call =“$ {clientlib.all @ categories ='somecategory'}”)?

还有什么是包含客户端库的建议方法,是创建一个特定于组件的clientlib,只为该组件加载,还是在公共clientlib中包含所有CSS和JS并使用它?

2 个答案:

答案 0 :(得分:2)

,clientlib仅包含一个类别。

这是设计的,因为HTL(和相应的JSP标记)在运行时期间进行评估,处理器会保留已包含但不再包含它们的类别的映射。

答案 1 :(得分:2)

正如@ i.net所提到的,每个类别只包含一次。要回答有关建议方法的后续问题..

最佳做法似乎是为每个组件定义一个客户端库,然后将其嵌入到" global"客户端库。然后,该全局客户端库将包含在您的页面模板中。

/etc/designs/acme/clientlibs-all
    categories=["acme-all"]
    embed=[compA,compB]
/apps/acme/components/compA/clientlibs
    categories=["compA"]
/apps/acme/components/compB/clientlibs
    categories=["compB"]

全局客户端库位于/etc/designs下的原因是为了防止向公众公开/apps。但是,在AEM 6.3中,您可以使用allowProxy属性来提供/etc.designs/处的代码。这将是这样的:

/apps/acme/clientlibs/clientlibs-all
    categories=["acme-all"]
    embed=[compA,compB]
    allowProxy=true
/apps/acme/components/compA/clientlibs
    categories=["compA"]
/apps/acme/components/compB/clientlibs
    categories=["compB"]

Adob​​e最近发布了一个关于客户端库结构的最新最佳实践的良好教程:https://helpx.adobe.com/experience-manager/kt/sites/using/getting-started-wknd-tutorial-develop/part3.html