我目前正在研究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"
它在作者和出版商上完全正常。
错误? 也许有一个解决方案,我不知道...? 任何建议都会很棒。
由于 尼古拉
答案 0 :(得分:0)
似乎这可能是预期的行为。以下是Adobe's docs的引用:
属性从左到右解析,属性的最右边实例(文字或通过data-sly-attribute定义)优先于相同属性的任何实例(按字面或通过data-sly-attribute定义)在左边定义。
这意味着如果您的属性映射包含class
属性,那么如果它位于右侧,它将优先于文字类属性。