如果我们在组件jsp中提供cq:includeClientLib,并且如果我们在该页面上拖放组件两次,那么clientlib会被加载/包含两次吗?
如果我们以明显的方式进行会是什么情况(data-sly-call =“$ {clientlib.all @ categories ='somecategory'}”)?
还有什么是包含客户端库的建议方法,是创建一个特定于组件的clientlib,只为该组件加载,还是在公共clientlib中包含所有CSS和JS并使用它?
答案 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"]
Adobe最近发布了一个关于客户端库结构的最新最佳实践的良好教程:https://helpx.adobe.com/experience-manager/kt/sites/using/getting-started-wknd-tutorial-develop/part3.html