我有一个关于使用Sightly来访问组件的子节点的问题。我有一个使用data-sly-resource引入基本图像组件的模板,如此。
<div class="${wcmmode.edit ? 'image-edit image' : 'image'}" data-sly-resource="${ 'heroImage' @ resourceType='/libs/foundation/components/image', appendPath='image', selectors='fileReference' }"> </div>
我想要做的是根据图像组件是否实际具有图像集来更改css类。为此,我的计划是访问图像组件节点并读取其文件引用。
的一些方面<h1>${ properties["heroImage"] }</h1>
不幸的是,这不起作用。我的问题是如何从我的模板中访问heroImage资源的fileReference,将其视为子节点。
谢谢, 哈利
答案 0 :(得分:5)
在AEM6中,直接从Sightly模板访问子节点及其属性是不可能的,而无需在Use-API中准备数据。
这是准备这些数据的一种方式,因此在您的CQ组件中,您通常会有类似于两个文件的内容。
<!-- template.html -->
<h1 data-sly-use.logic="Logic">
${logic.heroImage.fileReference}
</h1>
和
<!-- Logic.java -->
package apps.PATH.TO.YOUR.COMPONENT.FOLDER;
import com.adobe.cq.sightly.WCMUse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
public class Logic extends WCMUse {
private static final String CHILD_NODE = "heroImage";
private ValueMap childProperties;
@Override
public void activate() throws Exception {
Resource childResource = getResource().getChild(CHILD_NODE);
childProperties = childResource.adaptTo(ValueMap.class);
}
public ValueMap getHeroImage() {
return childProperties;
}
}
您还可以将Logic.java文件移动到OSGi包中,然后您显然会更改包名称,并且在模板中调用该类,您必须提供完全限定的包名称:<h1 data-sly-use.logic="com.PATH.TO.YOUR.PACKAGE.Logic">
希望有所帮助, 加布里埃尔
答案 1 :(得分:3)