2014-09-05 2 views
3

Sightly를 사용하여 구성 요소의 자식 노드에 액세스하는 것에 관한 질문이 있습니다. 나는 데이터 - sly-resource를 사용하여 기본 이미지 컴포넌트를 가져 오는 템플릿을 가지고있다.AEM 6.0 Sightly Child Nodes

<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에 액세스하여 자식 노드로 보는 방법입니다.

감사합니다, AEM6에서 해리

+0

나는 이것이 가능하다면 모르겠지만, 당신은 자바 클래스 내에서이 검사를 구현하고 데이터 교활한 참조 할 수있다 -용도. – Thomas

+0

이 새 질문을 참조하십시오. http://stackoverflow.com/questions/33418480/how-do-i-access-the-properties-of-a-data-sly-list-item-in-sightly –

답변

5

, 사용-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">

희망 도움이 가브리엘을