bem-site / bem-forum-content-ru

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

Добавить элемент после элемента в шаблоне BEMHTML #1166

Open o5e2e2 opened 8 years ago

o5e2e2 commented 8 years ago

BEMJSON:

        {
            block: 'menu',
            elem: 'content'
        }

нужно получить:

        {
            block: 'menu',
            elem: 'content'
        },
        {
            block: 'menu',
            elem: 'overlay'
        },

c помощью шаблона:

block('menu').elem('content')(
    tag()(false),
    content()(function() {
        return [
            {
                elem: 'content2',
            },
            {
                elem: 'overlay'
            }
        ]
    })
);

можно получить почти то, что нужно, а но заменить элемент content2 на content не получается.

tadatuta commented 8 years ago

Если задача действительно такая странная и решать нужно именно ее, а не порефакторить где-то заранее, чтобы она в принципе не возникала, то можно сделать, например, так.

o5e2e2 commented 8 years ago

Спасибо. Не очень красиво, но теперь хотя бы понятно, как подобные вещи сделать.

У меня собственно блок menu mix с блоком page, и у него своих шаблонов нет.

Если сделать сам элемент menu__content блоком, тогда его элемент "content всей страницы" и элемент кнопка "гамбургер" окажутся в DOM снаружи блока. Так сделать нормально?

tadatuta commented 8 years ago

Я предлагаю не экономить лишний DOM, сделать полноценный блок menu со своими шаблонами и не городить огород. Более того, я считаю, что добавить __overlay явно, без магии.

o5e2e2 commented 8 years ago

Меню должно влиять на стили всего контента page, т. е. по-крайней мере один элемент находится в DOM снаружи меню.

Вопрос по методологии и реализации block.elem() и this.liveBindTo() -- элементы ищутся внутри block.domElem или по всему документу?