Я сломал весь мозг пытаясь понять можно ли сгенерировать контент для блока 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 реализацию блока.