https://jsfiddle.net/bkj0qu9o/
Круто! Спасибо.
А как тоже самое без html, но с bemjson, то есть одним js, возможно ?
@weynemeynen можно с точностью до того, что должен быть минимальный HTML, который подключит на страницу нужный JS-файл.
Тогда в JS можно сделать:
OK! Вижу в документации ответ: https://ru.bem.info/libs/bem-components/v2.4.0/#Работа-с-библиотекой-в-виде-dist
Спасибо.
@tadatuta, извините, не понял, в какой именно репозиторий писать об этой особенности.
В вашем (https://jsfiddle.net/bkj0qu9o/) и мной дополненном (https://jsfiddle.net/SerGen/rntubqxr/) примерах в ФФ46 (стабильная) и ФФ48 (для разработчиков) не появляется ни одно окно. Вин 7, если что.
@Ser-Gen Проблема связана с тем, что инициализация блока происходит раньше, чем выполняется доопределение. Решить это можно ручной инициализацией: https://jsfiddle.net/tadatuta/bkj0qu9o/3/
В этом фиддле поменялось 2 момента:
@tadatuta, не очень прозрачно получается. Это будет исправляться?
Для диста это принципиально невозможно исправить.
Есть два варианта собираемых JS-бандлов:
init()
Первый вариант можно использовать там, где нет необходимости доопределять блоки (например, если логика пишется с использованием другого JS-фреймворка).
Если же есть необходимость добавить что-то с использованием
i-bem.js
, то инициализацию потребуется позвать после того, как выполнятся все необходимые декларации.Ясно, спасибо за разъяснение.
Всё же дополню. Проблема в том, что инициализацию нужно делать для ФФ, в хроме и, например, ИЕ11 всё работает нормально и без неё. Потому я и решил, что это ошибка.
То, что оно работает в каких-то браузерах — это случайность. Код асинхронный и работоспособность доопределений при наличии автоинициализации не гарантируется.
Всё, теперь понятно, спасибо!
@tadatuta, Владимир, добрый день.
Имеется legacy-проект, на котором мы хотим начать использовать БЭМ. Использование полного стека технологий будет слишком большим шагом для нас. Мы хотим начать с использования только самого ядра - i-bem.js. В первом подходе я взял его отсюда http://tenorok.github.io/get-i-bem/, но потом не смог его красиво "поженить" с ymodules. Там в теле скрипта создаётся свой собственный global.modules, который в конце удаляется. Если это всё почистить, то i-bem.js+ymodules заводится, но выглядит подозрительно. :)
Копаясь далее, я понял, что в нашем случае правильным будет использование простой dist-версии с https://yastatic.net/, но я никак не могу понять, как нам подключить только "голый" i-bem.js+ymodules без библиотеки блоков и без привязки к платформе (desktop, touch и пр.)
Какую ссылку нужно использовать в нашем случае?
Спасибо!
bem-core тоже имеет dist версию и скорее всего есть и на yastatic.net, но ссылку сходу не нашел https://github.com/bem/bem-core-dist
О, круто! Похоже, это то, что нужно.
Составил вот такую ссылку: https://yastatic.net/bem-core/2.9.1/desktop/bem-core.no-autoinit.js - работает! :)
Хочу только уточнить: bem-core ведь на деле никак не привязан к платформе? Или для мобильной версии нужно использовать https://yastatic.net/bem-core/2.9.1/touch/bem-core.no-autoinit.js ?
@dmitry-novoselov
touch
версия имеет отличия только в блокахpage
иua
. Если вы их не используете, то достаточно подключитьdesktop
версию.@Guria понял, спасибо!
Только что запаблишил 3.0.1: https://yastatic.net/bem-core/3.0.1/desktop/bem-core.no-autoinit.js
@tadatuta да, подключил в проект - всё работает. Спасибо!