AEM - Sightly:data-sly-attribute擦除标记

时间:2016-01-18 21:55:16

标签: java html css aem sightly

我目前正在研究AEM 6.0的组件,我注意到了data-sly-attribute sightly属性的一个非常奇怪的行为,我想知道这是否已被其他人注意到(可能是一个bug) 。

请使用以下代码:

模板 html

<div id="${properties.divId}" 
data-sly-use.attr="com.something.sightly.promoModel" 
     data-sly-attribute="${attr.attributeMap}">

     <a href="www.example.com" 
        class="btn btn-transparent" 
        data-sly-attribute.target="${properties.ckbNewWindow}" 
        **data-sly-attribute="${attr.attributeMap}"**>
       ${properties.ctaText}
    </a>

</div>

模型 java

public class PromoModel{
    protected HashMap<String, String> attributeMap = new HashMap<String, String>();
    @Override
    public void activate() throws Exception {
        attributeMap= ComponentUtils.buildDataAttributeMapFromResource(Constants.DATA_ATTRIBUTES_FIELD, getRequest());
}

public HashMap<String, String> getAttributeMap(){
    return attributeMap;

}

使用buildDataAttributeMapFromResource函数,它基本上根据组件中的内容填充HashMap。

问题是,当这个代码在Author上执行时它工作得很好但是当我在发布者上执行时:

class="btn btn-transparent"

不呈现。 似乎data-sly-attribute会覆盖它并因此删除它,因为如果我将模板更改为:

<div id="${properties.divId}" 
data-sly-use.attr="com.something.sightly.promoModel" 
     data-sly-attribute="${attr.attributeMap}">

     <a **data-sly-attribute="${attr.attributeMap}"**
        href="www.example.com" 
        class="btn btn-transparent" 
        data-sly-attribute.target="${properties.ckbNewWindow}">
       ${properties.ctaText}
    </a>

</div>

请注意

data-sly-attribute="${attr.attributeMap}"

前面
class="btn btn-transparent"

它在作者和出版商上完全正常。

错误? 也许有一个解决方案,我不知道...? 任何建议都会很棒。

由于 尼古拉

1 个答案:

答案 0 :(得分:0)

似乎这可能是预期的行为。以下是Adobe's docs的引用:

  

属性从左到右解析,属性的最右边实例(文字或通过data-sly-attribute定义)优先于相同属性的任何实例(按字面或通过data-sly-attribute定义)在左边定义。

这意味着如果您的属性映射包含class属性,那么如果它位于右侧,它将优先于文字类属性。