AEM 6.0视力儿童节点

时间:2014-09-05 15:37:16

标签: adobe cq5 aem sightly

我有一个关于使用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,将其视为子节点。

谢谢, 哈利

2 个答案:

答案 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)

由于至少AEM 6.1(Sling API bundle 2.7.0),Sling fiddle API上有getValueMap()方法。所以你现在可以简单地使用:

${resource.valueMap.fileReference}

另见这个较新的问题:Resource