2

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

采取以下代码:

模板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 上执行此代码时效果很好,但是当我在 Publisher 上执行它时:

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"

它在作者和出版商上表现得非常好。

漏洞 ?也许有一个我不知道的解决方法......?任何建议都会很棒。

谢谢尼古拉

4

1 回答 1

1

似乎这可能是预期的行为。这是来自Adob​​e 文档的引述:

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

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

于 2016-04-04T14:44:54.643 回答