cq:includeClientLib 在 AEM 中,如果包含在组件中 jsp 并且该组件在页面上出现两次
cq:includeClientLib in AEM if included inside a component jsp and the component is present twice on the page
如果我们在我的组件 jsp 中提供 cq:includeClientLib 并且如果我们在该页面上拖放组件两次,clientlib 是否会获得两次 loaded/included?
如果我们用 Sightly 的方式来做会怎样 (data-sly-call="${clientlib.all @ categories='somecategory'}") ?
以及包含客户端库的建议方法是什么,要么创建一个特定于该组件的客户端库并仅为该组件加载,要么将所有 CSS 和 JS 包含在一个公共客户端库中并在整个过程中使用它?
否,clientlib对一个类别只包含一次。
这是设计使然,因为 HTL(和相应的 JSP 标签)在运行时进行评估,并且处理器保留已包含的类别映射,并且不会再次包含它们。
如@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
暴露给 public。但是,在 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
如果我们在我的组件 jsp 中提供 cq:includeClientLib 并且如果我们在该页面上拖放组件两次,clientlib 是否会获得两次 loaded/included?
如果我们用 Sightly 的方式来做会怎样 (data-sly-call="${clientlib.all @ categories='somecategory'}") ?
以及包含客户端库的建议方法是什么,要么创建一个特定于该组件的客户端库并仅为该组件加载,要么将所有 CSS 和 JS 包含在一个公共客户端库中并在整个过程中使用它?
否,clientlib对一个类别只包含一次。
这是设计使然,因为 HTL(和相应的 JSP 标签)在运行时进行评估,并且处理器保留已包含的类别映射,并且不会再次包含它们。
如@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
暴露给 public。但是,在 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