2016-01-18 3 views
0

В настоящее время я работаю над компонентами для AEM 6.0, я заметил довольно странное поведение атрибута атрибута данных с атрибутом, и мне интересно, это то, что было замечено другими (возможно, ошибка).AEM - Sightly: data-sly-attribute стирание css на теге

Возьмем следующий код:

ШАБЛОН (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; 

} 

с buildDataAttributeMapFromRe source, которая в основном заполняет HashMap на основе того, какой контент находится в компоненте.

Вопрос в том, когда этот код выполняется на Автор, он прекрасно работает, но когда я исполню ее на издателе:

class="btn btn-transparent" 

не оказывает. Похоже данных хитрая-атрибут перезапись его и тем самым стирая его, потому что если я изменить шаблон к этому:

<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" 

он отлично подходит для авторов и издателей.

Ошибка? Может быть, есть исправление для этого, что я не знаю ...? Любые советы были бы замечательными.

Благодаря Nicola

+0

Вы пробовали контекст XSS? Вот документация: https://docs.adobe.com/docs/en/aem/6-0/develop/sightly/expression-language.html#Display Context Что-то вроде ** data-sly-attribute = " $ {attr.attributeMap @ context = 'styleString'} "** – Bambara

ответ

0

Похоже, это, вероятно, ожидаемое поведение. Вот цитата из Adobe's docs:

Атрибуты разрешаются слева направо, с крайнего правого экземпляра атрибута (либо буквального или определенной с помощью данных-хитро-атрибута), имеющего приоритет над любыми экземплярами одного и того же атрибута (определяется либо буквально или через атрибут data-sly), определенный слева.

Это означало бы, что если ваша карта атрибутов содержит атрибут class, тогда он будет иметь приоритет над атрибутом литерала, если он будет дальше вправо.