Приветствую всех! Дошел до изучения i-bem.js и сразу возник вопрос. Я хочу в проекте использовать только этот фреймворк, без остального стека технологий БЭМ. Задав данный вопрос у вас в чатике на Gitter я получил пару ссылок: https://github.com/tenorok/bemer и https://github.com/tenorok/get-i-bem, и вторая в начале меня привлекла, но я так и не смог понять как использовать данный вариант в моем случае. Вот html, который я написал:
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" href="static/main.css"/>
<script src="libs/jquery/dist/jquery.js"></script>
<script src="libs/i-bem/i-bem.js"></script>
<script src="common.blocks/b-button/b-button.js"></script>
</head>
<body>
<button class="b-button i-bem">Click me!</button>
<button class="b-button b-button_theme_ku i-bem">Click me!</button>
</body>
</html>
А это js:
BEM.DOM.decl('b-button', {
onSetMod : {
'js' : {
'inited': function() {
this.bindTo('click', function(e) {
console.log("Clicked!")
});
}
}
}
});
Но ничего не работает. Клик не обрабатывается. Возможно я куда-то не туда думаю. Направьте меня, пожалуйста :) Или просто использовать i-bem.js, подключив его на страницу невозможно?
Возможно, конечно.
i-bem.js
позволяет передавать параметры в инстанс блока через разметку. Для этих целей используется атрибутdata-bem
. Подробнее см. Привязка JS-блоков к HTML.В данном случае результат будет выглядеть так:
Игорь, а какие причины не использовать сборку? Возможно, мы придумаем, как их обойти.
Присоединяюсь к вопросу причины не использовать сборку, тоже интересно почему.
@tadatuta Могу сказать про себя, бывает очень сложно изменить сборку когда это надо или понимаешь что для того что бы изменить так как хочешь надо изобрести велосипед, или не хочешь видеть нагенерированные переходные файлы, а нет придется их терпеть.
А я поделюсь про скорость просто верстки html и верстки в простом project-stub так вот по ощущениям как минимум не разницы, максимум есть много положительного — все пожато, есть крутые компоненты из bem-components если нужно верстать формы, i-bem.js, фриз статики, и более удобный bemjson и bemhtml по сравнению с html. Плагины jq очень просто заворачиваться в ym если это проблема
Ну кажется достаточно нахвалил :) Плюс чем больше ты делаешь страниц, тем выше твоя скорость разработки. В общем это мои ощущения
@kuflash Отпишись получилось ли, если нет, мы все еще готовы помочь)
@tadatuta спасибо огромное! Получилось завести :) Сборку желание есть использовать, но пока не получается перестроить мозг для понимания конфигурации bem-tools. Я использую grunt/gulp и там все понятно. Наверное надо просто повнимательнее почитать доки про bem-tools.
@voischev я бы и рад использовать bemhtml, но на бэкенде java. А прослойку с nodejs для сборки делать не будут. Соответственно смысла писать на bemhtml, чтобы потом все равно руками резать на нужные шаблоны для java не вижу. А так, как будет возможность, то конечно попробую и bemhtml на вкус :)
@kuflash предложу вот такой вариант:
В браузере открыть http://localhost:8080/desktop.bundles/index/index.html
Дальше можно редактировать HTML в desktop.bundles/index/index.html, создавать новые блоки с CSS и JS в desktop.blocks/ и, если они упомянуты в html, то будут автоматически попадать в сборку.
@tadatuta +1
@tadatuta благодарю! Но все таки я попробую сам поковырять конфиги bem-tools. А может и enb. Не люблю, когда не понятно как это работает все. Хочу по немногу, но сам руками дописывать конфиги, тогда и разберусь со всем этим делом. Собственно, как это у меня было с grunt/gulp.
Интересует способ, а точнее нужен совет. Хочу вынести i-bem (dom, events, pointer) в отдельную папку.
Немного не прижился bem-stub в команде. Поэтому хочется попробовать сделать свою "облегчённую" сборку для нашего текущего процесса.
Лучше i-bem для работы с bem я ничего не встречал. Хочется вынести со всеми нужными модулями для дальнейшего применения в проекте/проектах.
Для этого достаточно вытащить его из bem-core? Или есть подводные камни?
Для этого достаточно собрать bemjson.js с
[{ block: 'i-bem' }]
и всеми остальными, которые нужны.Подводные камни, конечно, есть, но не касаются самого
i-bem
— все, что ему нужно, попадет в сборку. Если вам самим чего-то будет не хватать — надо будет дописать туда нужное и пересобрать.Важно понимать, что дополнительно приедет модульная система. Если она не нужна — то это один из подводных камней.
@zxqfox да ) Возможно действительно так будет прощё.
@tadatuta @zxqfox
В общем не пойму в чём дело.
Собрал i-bem по следующему bemjson
Блок на странице не инициируется, хотя в склеенном js файле (полученный i-bem + код блока) присутствует.
Проверь наличие i-bem__dom_init_auto.
Проверь html:
Всё есть. Если использовать код, собранный через bemjson для блока - то всё работает. А при той схеме, которую хочу реализовать - нет.
Может быть порядок?
подключение блока происходит после собранного i-bem
Ну да, видимо дело в этом.
Попробуй в консольке.
Если заработает — надо менять порядок через депсы (пытаться).
в рабочей сборке БЭМа нашёл такой кусок кода
но при добавлении данного кода возникает ошибка в next-tick модуле
Ну я спрашивал про i-bem__dom_init_auto ;-) Это оно и есть.
next-tick у тебя в сборке, видимо, отсутствует.Ой. А покажи ошибку?
присутствует
в этой части ругается
на строку
Uncaught TypeError: undefined is not a function
А вот модуля "i-bem__dom_init" я у себя в сборке не нашёл
Всё. Заработало :) Не хватало именно его
угу, только хотел сказать, что
Непонятно, правда, почему оно отрезолвилось пустышкой.
/cc @tadatuta
Что-то не получается сделать сборщик i-bem.
Можете подсказать способ с более "правильным" подключения блоков? Или как модифицировать данный. Вручную собирать "движок" не очень удобно.
upd
Заметил что Chrome не всегда отрабатывает второй js файл.
Т.е. у меня есть один общий, для всех страниц. И для разных страниц есть свои блоки. Не всегда второй скрипт (набор блоков) отрабатывает. Работает только после перезагрузки.
Кто-то решал данную проблему подключения js?
Заметил, что если подключить в конце ещё файл с содержанием инициализации, то всё заработает.
но как-то не очень это выглядит... Ещё один js для "зажигания". В html если его подключать, то выдает ошибку, ругаясь на modules, мол не определён.
Общее решение выглядит так
А вот и сам стартер
@belozyorcev Пытаюсь вникнуть в проблему, а ты её решил уже? ;)