我有一个关于使用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>
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据图像组件是否实际具有图像集来更改css类.为此,我的计划是访问图像组件节点并读取其文件引用.沿途的东西
<h1>${ properties["heroImage"] }</h1>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.我的问题是如何从我的模板中访问heroImage资源的fileReference,将其视为子节点.
谢谢,哈利
在AEM6中,如果不在Use-API中准备数据,则无法直接从Sightly模板访问子节点及其属性.
这是您准备数据的一种方式,因此在CQ组件中,您通常会有类似以下两个文件的内容.
<!-- template.html -->
<h1 data-sly-use.logic="Logic">
${logic.heroImage.fileReference}
</h1>
Run Code Online (Sandbox Code Playgroud)
和
<!-- 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;
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以将Logic.java文件移动到OSGi包中,然后您显然会更改包名称,并且在模板中调用该类,您必须提供完全限定的包名称: <h1 data-sly-use.logic="com.PATH.TO.YOUR.PACKAGE.Logic">
希望有所帮助,加布里埃尔
| 归档时间: |
|
| 查看次数: |
7835 次 |
| 最近记录: |