2014-09-05 52 views
3

我身邊有使用悅目訪問組件的子節點的問題。我有一個模板,它使用數據狡猾的資源來提取基本的圖像組件,就像這樣。AEM 6.0悅目子節點

<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

我不知道這是可能的,但你可以實現一個Java類中此檢查並引用它的數據狡猾-使用。 – Thomas 2014-09-08 07:01:59

+0

又見這個新問題:http://stackoverflow.com/questions/33418480/how-do-i-access-the-properties-of-a-data-sly-list-item-in-sightly – 2015-10-29 17:54:20

回答

5

在AEM6,是不可能直接從悅目模板訪問子節點和他們的屬性,而無需使用的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包,那麼你會明顯更改包名稱,並在模板中調用類,你」 d則必須提供完全合格的包名稱:<h1 data-sly-use.logic="com.PATH.TO.YOUR.PACKAGE.Logic">

希望幫助, 加布裏埃爾