bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Изменение дефолтного тега блоку, примиксованному в качестве элемента #721

Open artkravchenko opened 8 years ago

artkravchenko commented 8 years ago

Имеем следующую структуру BEMJSON:

...
{
    block: 'info',
    content: [
        {
            block: 'text',
            mix: { block: 'info', elem: 'title' },
            content: 'Some text'
        },
        ...
    ]
}
...

info__title.bemhtml :

block('info').elem('title')(
    tag()('h1')
)

На выходе получаем (стили из info__title.styl успешно парсятся — зависимости соблюдены) :

<div class="text info__title">Some text</div>

В чем ошибка?

tadatuta commented 8 years ago

Шаблоны на миксы не применяются, потому что в общем случае возникает неоднозначность, какой шаблон должен победить в результате:

{
    block: 'b1',
    mix: [{ block: 'b2' }, { block: 'b3' }]
}
block('b1').tag()('tag1');
block('b2').tag()('tag2');
block('b3').tag()('tag3');

Если известно, что в данном случае у блока text не может быть шаблонов, то достаточно просто инвертировать block и mix.

artkravchenko commented 8 years ago

Большое спасибо за ответ.

...
{
    block: 'info',
    content: [
        {
            elem: 'title',
            mix: { block: 'text' },
            content: 'Some text'
        },
        ...

Результат:

<h1 class="info__title text">Some text</h1>

Поражен оперативностью. Плюс в карму!