是否可以在不扩展和创建自定义版本的 parsys 的情况下测试 parsys 是否有内容?也接受指向 parsys 属性的一些文档的链接。
我有一个 parsys,如果应用到 parsys 的某些类影响布局,它是空的,我需要删除它。
您必须为此使用 USE API 类。
上面引用的 hasChildren() 函数在 js 使用 api 类中不起作用(这很烦人 - 这是 js usp api 中可用资源的实现:http: //svn.apache.org/viewvc/sling/ trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java?revision=1674092&view=markup)。
这是一个使用 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>
hasChildren.js
"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;
}
});
您可以提取 parsys 的 sling 资源,然后检查它是否有子项:
boolean isParsysEmpty = !resourceResolver.resolve("/path/to/your/parsys").hasChildren();