Привет!
Если вы подписаны на наши репозитории, то уже знаете, что мы определили предварительный план задач по разработке третьей версии bem-core.
Основной упор мы планируем сделать на улучшение API i-bem.js.
Как мы будем это делать?
Во-первых, планируем явно разделить i-bem и i-bem__dom на 2 разных блока-модуля. Это сделает API более аккуратным, в частности методы-хелперы будут отделены от JS-классов.
Во-вторых, собираемся на уровне ядра поддержать возможность работы с элементами блоков как с полноценными i-bem-объектами вместо того, чтобы рассматривать их в качестве jQuery-коллекций. Сейчас примерно похожая функциональность доступна отдельно в виде модификаторов elem-instances
у i-bem
и i-bem__dom
. Это позволит избежать странной ситуации с тем, что одновременно существуют элементы как jQuery-объекты и элементы как БЭМ-инстансы, и сделать более удобное API (вместо this.setMod(this.elem('e1'), 'm1', 'v1')
будет this.elem('e1').setMod('m1', 'v1')
). Также это позволит избавиться от сложного полиморфизма целого ряда методов внутри ядра.
В-третьих, улучшим реализацию и внесем в ядро поддержку коллекций блоков и элементов.
В-четвертых, интеграция с модульной системой ym станет более тесной — методы поиска блоков (например, .findBlockInside('b1')
) вместо строк будут принимать конкретные классы блоков (исчезнет неявная «магия» и будет меньше потенциальных ошибок).
В-пятых, подумаем, как можно унифицировать работу с событиями, особенно с live-BEM-событиями.
Кроме того, реализуем поддержку i18n в более простом виде, чем в bem-bl, обновим версию bem-xjst, что позволит не заворачивать в дополнительные гарды от зацикливания конструкции apply* в BEMHTML и BEMTREE и сделаем еще ряд более мелких изменений.
На этапе планирования разработки нам очень хотелось бы получить обратную связь, помогут ли такие изменения упростить работу с библиотекой, или же нам стоит посмотреть на что-то еще?
Поэтому если вы хотите предложить задачи для грядущей версии — создавайте нам issues, мы будем им рады!
Stay BEMed!