Aem 仅加载当前页面中的组件脚本

Aem 仅加载当前页面中的组件脚本,aem,Aem,我试图实现的是,如果我有两个组件节点: 组件1 客户端库 组件1.js 组件2 客户端库 组件2.js 我将它们拖到page1中,然后在生成page1时,导航到page1时只加载component1.js和component2.js 我看到的一种方法是使用自定义标记库,如下所述: 我有两个问题: 1) AEM中是否存在执行此操作的现有功能 2) 如果没有,创建此类自定义标记库的最简单方法是什么 编辑: 假设不能只包含所有组件ClientLib,而只能加载添加到页面中的组件。理

我试图实现的是,如果我有两个组件节点:

  • 组件1

    • 客户端库
      • 组件1.js
  • 组件2

    • 客户端库
      • 组件2.js
我将它们拖到page1中,然后在生成page1时,导航到page1时只加载component1.js和component2.js

我看到的一种方法是使用自定义
标记库
,如下所述:

我有两个问题:

1) AEM中是否存在执行此操作的现有功能

2) 如果没有,创建此类自定义标记库的最简单方法是什么

编辑:


假设不能只包含所有组件ClientLib,而只能加载添加到页面中的组件。

理论上,可能的方法是在页面组件/抽象页面组件中编写脚本,这样做-

步骤1:字符串路径=currentPage.getPath()

步骤2:查询组件的此路径(一种方法是让主列表在sling:resourceType上执行contains子句)

步骤3:用户资源解析程序在步骤3中解析资源类型,这将为您的应用程序下提供资源

步骤4:从上述资源中获取主要类型为cq:ClientLibraryFolder的子资源

第5步:从第4步中的客户机libs资源中获取类别并包含其中的JS

实际上,您可以编写一个模型,使组件资源适应clientLibrary,从而实际清理代码


如果您需要实际的代码,请告诉我,我可以在空闲时间编写。

没有内置的功能来完成此操作。虽然我听说clientlib基础设施正在考虑重新编写,但我对将来添加类似的内容持乐观态度

我们已经,我知道其他公司已经创建了一个“延迟脚本标记”。我们的标记非常简单,可以像clientlib include一样获取一大块html,将其添加到一个唯一的列表中,然后在页脚发出一个out call,一个接一个地吐出所有内容

下面是扩展BodyTag支持的简单标记实现的核心。然后在页脚中抓住属性并写出它

public int doEndTag() throws JspException {
    SlingHttpServletRequest request = (SlingHttpServletRequest)pageContext.getAttribute("slingRequest");

    Set<String> delayed = (Set<String>)request.getAttribute(DELAYED_INCLUDE);

    if(delayed == null){
        delayed = new HashSet<String>();
    }

    if(StringUtils.isNotBlank(this.bodyContent.getString())){
        delayed.add(this.bodyContent.getString().trim());
    }

    request.setAttribute(DELAYED_INCLUDE, delayed);
    return EVAL_PAGE;
}
public int doEndTag()抛出JspException{
SlingHttpServletRequest=(SlingHttpServletRequest)pageContext.getAttribute(“slingRequest”);
Set delayed=(Set)request.getAttribute(delayed_INCLUDE);
如果(延迟==null){
延迟=新的HashSet();
}
if(StringUtils.isNotBlank(this.bodyContent.getString())){
delayed.add(this.bodyContent.getString().trim());
}
request.setAttribute(DELAYED_INCLUDE,DELAYED);
返回评估页面;
}

这在AEM中是现成的。以下是,也适用于以前的版本。它仅描述了如何加载特定类别的脚本。。我找不到如何加载当前页面中的组件脚本的参考,因此不会加载不在该页面中的具有相同类别的组件的其他脚本,tyComponent特定脚本应使用该组件对应的唯一类别定义。因此,当您跨页面使用相同的组件时,这些脚本将被包括在内。如果您为多个组件的脚本提供一个公共类别,那么它们应该在所有这些组件中提供一些公共功能。