Войти с помощью github
Форум /

Выявил особенность работы с модификаторами одного js блока на нескольких DOM-нодах:

  • установка и удаление мода из i-bem изменяет соответствующий класс на всех нодах блока
  • если при инициализации у DOM-нод набор модификаторов отличается, то первый вызов метода hasMod имеет некоторые особенности:
{ block: 'a', mods: { foo: 'bar'}, js( { id:1})},
{ block: 'a', js( { id:1})}
> this.hasMod('foo')
true
> this.toggleMod( 'foo', 'bar').getMod( 'foo')
""
{ block: 'a', js( { id:1})}
{ block: 'a', mods: { foo: 'bar'}, js( { id:1})},
> this.hasMod('foo')
false
> this.toggleMod( 'foo', 'bar').getMod( 'foo')
"bar"

Возможные последствия:

  • первый вызов toggleMod может не выполнить то, что возможно ожидалось
  • стили модификатора могут повлиять на элемент, для которого они не предназначались

Способы решения:

  • одинаковые модификаторы на всех нодах блока при инициализации
  • стилизовать элементы по модификатору специфичным селектором

#asktheteam

  • данные особенности стоит отразить в документации
  • console.warn("unambigios mods set on block's nodes. see http://bem.info/... for more info") при инициализации в девелопер режиме P.S. если способа добавлять js код специфичный для девелопер режима сейчас нет, рассматривать это как отдельный фичреквест