К примеру есть блок Collapse, у него существует два элемента: Collapse__part & Collapse__item.
На момент инициализации блока хочу разбить его контент таким образом:
//- Из такой структуры (так определено в bemjson)
<div class="collapse">
<div class="work collapse__item">...</div>
<div class="work collapse__item">...</div>
<div class="work collapse__item">...</div>
</div>
//- В такую (модифицировать)
<div class="collapse">
</div class="collapse__part">
<div class="work collapse__item">...</div>
<div class="work collapse__item">...</div>
</div>
</div class="collapse__part">
<div class="work collapse__item">...</div>
</div>
</div>
C условием того что эти чанки могут быть разной длины(настраиваемый параметр), в данном случае длина составляет 2 элемента(Collapse__item)
Посоветуйте пожалуйста в какой технологии это лучше сделать (в js, bemhtml.js или иным способом), каким образом?
ps. полностью использую среду разработки BEM (rep.: Project-Stub)
Не совсем понятно, как будет выглядеть конечный вариант. Если хотите получить «аккордион», можно, например, сделать так: демо(%7B%0A%20%20content%3A%20(node%2C%20ctx)%20%3D%3E%20%7B%0A%20%20%20%20return%20ctx.items.map(%20(item%2C%20index)%20%3D%3E%20(%7B%0A%20%20%20%20%20%20elem%3A%20%27item%27%2C%0A%20%20%20%20%20%20elemMods%3A%20%7B%20active%3A%20!index%20%7D%2C%0A%20%20%20%20%20%20content%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20elem%3A%20%27title%27%2C%0A%20%20%20%20%20%20%20%20%20%20content%3A%20item.title%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20elem%3A%20%27content%27%2C%0A%20%20%20%20%20%20%20%20%20%20content%3A%20item.content%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%7D)%20)%0A%20%20%7D%2C%0A%20%20tag%3A%20%27ul%27%0A%7D)%0A%0Ablock(%27collapse%27).elem(%27item%27)(%7B%0A%20%20tag%3A%20%27li%27%0A%7D)%0A%0Ablock(%27collapse%27).elem(%27title%27)(%7B%0A%20%20tag%3A%20%27h4%27%0A%7D)&bemjson=%7B%0A%20%20block%3A%20%27collapse%27%2C%0A%20%20items%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20title%3A%20%27Tab%201%27%2C%0A%20%20%20%20%20%20content%3A%20%27Lorem%20ipsum%201%E2%80%A6%27%2C%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20title%3A%20%27Tab%202%27%2C%0A%20%20%20%20%20%20content%3A%20%27Lorem%20ipsum%202%E2%80%A6%27%2C%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20title%3A%20%27Tab%203%27%2C%0A%20%20%20%20%20%20content%3A%20%27Lorem%20ipsum%203%E2%80%A6%27%2C%0A%20%20%20%20%7D%0A%20%20%5D%0A%7D).
Пример очень похож (по структуре и логике) с табами, просто отображение чуть иное, можно даже только на CSS все различия решить: https://github.com/tadatuta/bem-bricks/blob/master/common.blocks/tabs/tabs.md
Основная задумка
Я делаю блок типа collapse, то есть сворот/разворот (знаю веселое слово, но другого не подобрал) по кнопке. К тому же, при клике по той самой кнопке, к примеру с названием "Показать еще", нужно чтобы лениво инициализировалась следующая часть, я подразумеваю элемент Collapse__part (изначально инициализирован только первый Collapse__part из возможных). Однако мне нужно добиться, чтобы блок Collapse, был максимально независимым от того, что в него положaт, то есть на месте блока Work, может оказаться любой блок, просто к нему примиксовывается элемент Collapse__item (так как в документации поясняется, что при миксе, целевой блок унаследует поведение и стили примиксованного).
То есть в моем случае мне удобно применять структуру bemjson следующего вида:
Микс же происходит, уже непосредственно в шаблоне bemhtml блока Work
Если я правильно понял, то в шаблоне (collapse.bemhtml.js) или его модификаторе надо:
@zxqfox, кажется, что @Karodar хочет чего-то другого, но мы его не можем понять.
А что у нас лежит в prevContent, по идее уже отшаблонизированный DOM ?
Просто из шаблонов, не знаю как посмотреть результат вывода, консоль то не работает (console.log())
@Karodar работает:
— в терминале, где запустил сборку, смотришь результат.
Окай, ожидал что там будет, просто из-за сообщений сборщика, при обновлении страницы, не заметил результат
Благодарю)
Отлично, все получилось:
Если принять за: