AEM:是否可以在不扩展parsys的情况下测试parsys是否有内容?

AEM:是否可以在不扩展parsys的情况下测试parsys是否有内容?,aem,sightly,Aem,Sightly,是否可以在不扩展和创建parsys的自定义版本的情况下测试parsys是否具有内容?也接受指向parsys属性的某些文档的链接 我有一个parsys,如果它是空的,我需要删除它,因为应用于parsys的某些类正在影响布局。您可以提取parsys的sling资源,然后检查它是否有子项: boolean isParsysEmpty = !resourceResolver.resolve("/path/to/your/parsys").hasChildren(); 请参阅JavaDoc: 为此,必须

是否可以在不扩展和创建parsys的自定义版本的情况下测试parsys是否具有内容?也接受指向parsys属性的某些文档的链接


我有一个parsys,如果它是空的,我需要删除它,因为应用于parsys的某些类正在影响布局。

您可以提取parsys的sling资源,然后检查它是否有子项:

boolean isParsysEmpty = !resourceResolver.resolve("/path/to/your/parsys").hasChildren();
请参阅JavaDoc:

为此,必须使用use API类

上面引用的hasChildren()函数在js use api类中不起作用(这很烦人——下面是js usp api中可用资源的实现:)

下面是一个解决方案,它使用ResourceUtils.js和q.js来测试所提供的parsys是否存在:

显然:

<div data-sly-use.hasChildren="${'hasChildren.js' @ parsys='MainContent', page=currentPage}" data-sly-unwrap>
  <div data-sly-test="${wcmmode.edit || hasChildren}" data-sly-unwrap>
      <div data-sly-resource="${'MainContent' @ resourceType='foundation/components/parsys'}"></div>
  </div>
</div>

我不能理解你的问题。请您更准确地解释一下您想做什么,这个用例应该是什么,可能还有一些受影响的代码。
"use strict";
use(["/libs/wcm/foundation/components/utils/ResourceUtils.js", "/libs/sightly/js/3rd-party/q.js"], function (ResourceUtils, Q) {

    var childPromise = Q.defer();

    if(this.page.getContentResource(this.parsys) != null) {
        ResourceUtils.getResource(this.page.getContentResource(this.parsys).getPath()).then(function(res) { 
            res.getChildren().then(function (childItems) {
                return childPromise.resolve(childItems.length > 0);
            }, function (error) {
            });
        }, function (error) {
        });
        return childPromise.promise;
    }
});