Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Матчинг на элемент по модификатору блока #181

Open
Mellanore opened this issue Mar 9, 2018 · 1 comment

Comments

@Mellanore
Copy link

В версии bh 3.x можно было доопределить шаблон элемента блока с каким-нибудь модификатором следующим образом:

bh.match('blockName__elemName', function(ctx) {   
    ctx.content('Hello!')
});

bh.match('blockName_modName_modVal__elemName', function(ctx) {   
    ctx.applyBase();

    ctx.content('Buy!', true)
});

И сматчиться на него так:

bh.apply({
    block: 'blockName',
    blockMods: { modName: 'modVal' },
    elem: 'elemName'
});

В версии 3.x получится <div class="blockName__elemName">Buy!</div>,
А в 4.x тот же код даст <div class="blockName__elemName">Hello!</div>

Сматчиться на элемент блока с модификатором в 4.x у меня получилось только таким незадокументированным способом (костылем?):

bh.apply({
    block: 'blockName',
    mods: { modName: 'modVal' },
    elem: 'elemName',
    elemMods: {} // При этом без указания хотя бы пустого `elemMods`, модификатор из `mods` приписывается элементу
});

Хочется узнать мнение мейнтейнеров bh насколько ОК использовать такой костыль и не перестанет ли он работать в следующих версиях. Может есть более лучший способ матчиться на элемент блока с модификатором?

@qfox
Copy link
Member

qfox commented Mar 13, 2018

На BEMJSON есть некоторый стандарт, который в BH доопределен полем blockMods.
Доопределение это было сделано из-за поля mods, которое в разном контексте в BH относится то к блоку, то к элементу.
В bem-xjst в какой-то момент решили отказаться от логики определения к чему относится поле mods в пользу всегда к блоку, а для элементов сделали отдельное поле elemMods.
В 4.х, видимо, пытались выкосить blockMods, но до конца не вышло.

  1. Передавать elemMods это не костыль.
  2. blockMods это нестандартное поле с точки зрения BEMJSON, elemMods — стандартное.
  3. Можно выпустить версию 5.х, где оторвать привязывание mods к элементам (сделать как в bem-xjst). Но это надо обсуждать

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants