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

Я сломал весь мозг пытаясь понять можно ли сгенерировать контент для блока menu за один проход. Проблема заключается в том, что блок menu не приемлет в поле content контекста ничего кроме элемента menu__group или блока menu-item. Таким образом, даже если положить в контент блока menu БЭМ сущность, которая могла бы развернуться в menu__group или menu-item, будет выброшено исключение. Проблему мне удавалось решить только используя 2 прохода. Сначала выполняем преобразование блоков в поле content вне блока menu, а на второй проход уже развёрнутое содержимое размещаем в блоке menu.

В BH это получилось сделать более-менее удачно, с помощью метода bh.processBemjson(). В xjst трансформацию контента пришлось делать в bemtree, а в блок menu вставлять уже в bemhtml. Приручить applyCtx, чтобы получилось как в BH не вышло.

Хотелось бы понять, возможно ли сгенерировать таким образом содержимое блока menu средствами bemhtml,не прибегая к bemtree:

view ориентированный bemjson на входе

{
    block: 'my-menu',
    content: [
        {
            elem : 'group',
            content : [
                {
                    elem : 'item',
                    title : '1st level item with sub-item'
                    content : [
                        elem : 'group',
                        content : {
                            elem : 'item',
                            content : '2nd level item'
                        }
                    ]
                }
            ]
        },
        {
            block: 'my-menu',
            elem : 'group',
            content : [
                {
                    elem : 'item',
                    title : '1st level item but in separate section'
                }
            ]
        }
    ]
}

На выходе ожидается разметка блока my-menu один из элементов которого будет блок menu (mix my-menu__menu) внутри которого будут menu__group (mix my-menu__group) и menu-item (mix my-menu__item).

Бонусный вопрос: зачем такие ограничения накладываются в шаблонах библиотеки? Мне кажется, что логику из-за которой возникли подобные ограничения можно было возложить на js реализацию блока.