是否可以测试一个parsys是否有内容而不扩展并创建自定义版本的parsys?也接受链接到一些文档到parsys属性。
我有一个我需要删除的解析,如果它是空的,因为应用于解析的一些类正在影响布局。
答案 0 :(得分:1)
您可以提取parsys的sling资源,然后检查它是否有子项:
boolean isParsysEmpty = !resourceResolver.resolve("/path/to/your/parsys").hasChildren();
答案 1 :(得分:1)
您必须使用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进行测试的解决方案,以查看提供的解析是否存在:
悦目:
<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;
}
});