【问题标题】:AEM 6.0 Sightly Child NodesAEM 6.0 Sightly 子节点
【发布时间】:2014-09-05 15:37:16
【问题描述】:

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

谢谢, 哈利

【问题讨论】:

标签: adobe aem sightly


【解决方案1】:

在 AEM6 中,如果不在 Use-API 中准备数据,就无法直接从 Sightly 模板访问子节点及其属性。

这是您准备数据的一种方式,因此在您的 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 包中,然后您显然会更改包名称,然后在模板中调用该类,您必须提供完全限定的包名称:@ 987654323@

希望对您有所帮助, 加布里埃尔

【讨论】:

    【解决方案2】:

    至少从 AEM 6.1(Sling API 捆绑包 2.7.0)开始,Sling Resource API 上有一个 getValueMap() 方法。所以你现在可以简单地使用:

    ${resource.valueMap.fileReference}
    

    另请参阅这个较新的问题:How do I access the properties of a data-sly-list item in Sightly?

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      相关资源
      最近更新 更多