bem-site / bem-forum-content-ru

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

Обернуть детей элемента в wrapper #1397

Closed Kundin closed 6 years ago

Kundin commented 7 years ago

Допустим есть блок menu с элементами menu__item. Как обернуть все menu__item в блок wrapper, используя bemhtml, чтобы не писать это в BEMJSON ручками.

Имеем:

    {
        block: 'menu',
        content: [
            { elem: 'item', content: 'item 1' },
            { elem: 'item', content: 'item 2' }
        ]
    }

Хотим:

    {
        block: 'menu',
        content: [
            {
                block: 'wrapper',
                content: [
                    {   block: 'menu', elem: 'item', content: 'item 1' },
                    { block: 'menu', elem: 'item', content: 'item 2' }
                ]
            }
        ]
    }

Такое возможно?

belozer commented 7 years ago
// menu.bemhtml.js
block('menu')(
    content()((node, ctx) => [
        {
            block : 'wrapper',
            content : {
                html : applyCtx(ctx.content, { 
                    block : node.block
                })
            }
        }
    ])
);

правда не уверен, что это наиболее оптимальное решение

kompolom commented 7 years ago
block('menu')(
  content()((node, ctx) => {
     return {
        block : 'wrapper',
        content : applyNext()
    };
  })
)
belozer commented 7 years ago

@kompolom это не сработает, т.к. элементы menu станут элементами блока wrapper, что не является ожидаемым поведением.

kompolom commented 7 years ago

Тогда можно, и я бы так сделал

block('menu')(
  content()((node, ctx) => {
     return {
        elem : 'wrapper',
        mix : { block : 'wrapper' },
        content : applyNext()
    };
  })
)
belozer commented 7 years ago

@kompolom да, согласен.

Kundin commented 7 years ago

Спасибо, работает как нужно последний вариант.