Собираюсь попробовать бэм на вкус и постепенно ознакамливаюсь с документацией по разным бэм технологиям. Ознакомился с документацией i-bem. И возник список вопросов. Надеюсь, что получу на них ответы и заранее благодарю каждого, кто поучаствует в этом. 1) При осуществление поиска элементов внутри блока, есть ли защита от следующего момента: предположим, что у нас есть блок .b-carousel(карусель со стрелочками для листания вперед и назад). У блока есть элемент .b-carousel__item. И представим ситуацию, что одна карусель вложена в другую, то есть вот такая картина:
<ul class="b-carousel"><li class="b-carousel__item"></li><ul class="b-carousel"><li class="b-carousel__item"></li></ul></ul>
В javascript-е этого компонента осуществляется поиск элемента b-carouselitem внутри блока. Но поскольку у нас одна карусель вложена в другую, то будут найдены как элементы блока, так и элементы вложенного блока. Есть ли защита, чтобы поиск шел вот так, если изъясняться в терминах css селекторов и jQuery: `$(block).find(':not(.b-carousel) .b-carouselitem, >.b-carousel__item');`? 2) Есть ли в бэм защита от повторной инициализации блока? То есть, например, блок уже проиницилизирован, затем где-то вызывается повторная инициализация и блок инициализируется заного и на элементы блока второй раз вешаются обработчики событий. 3) По-умолчанию инициализация блоков происходит по событию document ready. Впоследствие, если куда-то на страницу, например, аяксом подгрузился html, то мы можем вызвать bem.init(полагаю в качестве параметра методу init передается DOM узел, внутри которого будет производиться поиск бэм блоков). Скажите, может есть стадартный, общий для всех блоков метод, которому передаешь параметром DOM элемент куда вставить html и вторым параметром собственно сам html для вставки, при этом этот метод после вставки html-я сам будет вызывать bem.init на DOM узле, куда вставлялся html. Это бы автоматизировало процесс, не нужно было бы при каждой вставке html-я вызывать bem.init.
Если коротко, то 1 — нет, но
.elem()
вернет jQuery-чейн, который можно уточнить 2 — да 3 — да.1 — По идее
this.findElem('item', true)
должен решать эту проблему: https://github.com/bem/bem-core/blob/v1/common.blocks/i-bem/__dom/i-bem__dom.js#L676.Т.е. при переводе параметра
Strict Mode
вtrue
, поиск производится внутри текущего экземпляра блока, не затрагивая остальные.@aristov может рассказать подробнее или поправить меня.
да, насчет первого пункта - конструкция
this.findElem('item', true)
работает именно так, как нужно, поиск в глубь вложенного блока не будет производитьсяВсем спасибо. Я читал документацию здесь http://bem.github.io/bem-bl/sets/common-desktop/i-bem/i-bem.ru.html Судя по всему на bem.info более современная и полная документация, извиняюсь, что задал вопросы, не прочитав на bem.info
Более того - про более свежие библиотеки. bem-bl уже давно deprecated