Open kuflash opened 9 years ago
мне кажется ваш i-bem не в курсе, что надо инициировать блоки. см. https://github.com/bem/bem-core/blob/v2/common.blocks/page/page.deps.js#L4
@Guria, сделал так:
({
block: 'i-bem',
elem: 'dom',
mods : { init : 'auto' }
});
Скомпилировал и все равно не работает. Вот какой файл у меня собирается: https://www.dropbox.com/s/y32gbe4xce33jci/i-bem.js?dl=0
@kuflash Хм. не хватает только содержимого i-bem__dom_init_auto.js
Добавь в index.js:
/**
* Auto initialization on DOM ready
*/
modules.require(
['i-bem__dom_init', 'jquery', 'next-tick'],
function(init, $, nextTick) {
$(function() {
nextTick(init);
});
});
Для блока же нужно написать js:true
@zverbeta Если для блока был инициализирован клиентский JS, BEMHTML добавляет в список HTML-классов i-bem, а также атрибут со значением параметров клиентского JS (по умолчанию — data-bem, см. мода jsAttr)
см в коде <div class="b-calendar i-bem" data-bem="{'b-calendar:{}'}"></div>
@Guria, добавил. Теперь на странице вылетает ошибка: Uncaught SyntaxError: Unexpected token '
Ошибка пропадает, если закоментировать строку: nextTick(init);
Вот мой сходный код index.js:
modules.require(
['i-bem__dom_init', 'jquery', 'next-tick'],
function(init, $, nextTick) {
$(function() {
nextTick(init);
});
});
modules.define('i-bem__dom', function(provide, DOM) {
DOM.decl('b-calendar', {
onSetMod: {
'js' : {
'inited' : function() {
console.log('inited');
}
}
}
});
provide(DOM);
});
@kuflash Ошибка кроется в HTML-разметке — значение data-bem
должно быть валидным JSON-ом, т.е. необходимо использовать двойные кавычки для ключей: { "b-calendar": {} }
.
Еще сразу порекомендую использовать новый способ декларации блоков:
modules.define('b-calendar', ['i-bem__dom'], function(provide, BEMDOM) {
provide(BEMDOM.decl(this.name, {
onSetMod: {
js: {
inited: function() {
console.log('inited');
}
}
}
});
});
PS: Странно, что приходится вставлять i-bem__dom_init_auto
руками, он должен был собраться по декларации сам. Возможно, не пересобралось просто?
@tadatuta я пробовал воспроизвести, у меня даже i-bem__dom_init
не собрался
@tadatuta, заработало. Спасибо большое. По поводу i-bem__dom_init_auto
, не знаю, пересобирал несколько раз, удаляя все созданные файлы. этот кусок не вставляется почему то.
@tadatuta у меня собралось наконец-то с i-bem__dom_init_auto
дропал cache enb и перезапускал его, но собралось только когда я другой бандл в браузере загрузил
@tadatuta А не думали пытаться распарсить, если там {
в начале?
@zxqfox
А не думали пытаться распарсить, если там
{
в начале?
Раскрой мысль, пожалуйста.
@tadatuta Леша, видимо, имел в виду "не пробовали пытаться парсить невалидный json из data-атрибутов"? Думаю, не ошибусь, если скажу, что не пробовали и не собираетесь.
У меня про это есть вот такие ссылки: https://github.com/bem/bem-core/issues/250 https://github.com/bem/bem-core/pull/742
@apsavin :+1: вот так угадываешь! ;-)
@tadatuta Ну так это как раз про attr='{"valid":"json","inside":"attr"}'
. А я про attr="{invalid:'json'}"
— может быть примочку к i-bem
для чтения data-bem
в теории можно сделать.
upd Есть такая теория, как нужно асфальтировать тропинки для людей. Где протоптано — там и асфальтировать. У людей есть привычки, они плохие, они им мешают, но они еще не готовы от них избавляться — а методология их насильно в правильное русло с головой. Вот и боятся многие, что придется спортом заниматься и в 6 утра на завод. По грязюке, как привыкли, после ночного дождя.
@zxqfox такая примочка либо внутри будет eval делать (что XSS-ами всякими пахнет), либо будет монстроидальной и тормозной (если кастомный парсер писать)
upd не понятно, почему по грязюке, если если есть асфальт — а спорт это хорошо!
@veged Ну жили же с onclick="return " ? el=$('elem'); el.attr('onclick', 'return' + el.attr('data-bem')); el[0].onclick
voila! ;-) согласен, что без этого жить можно и главное — спокойнее спать по ночам будет.
А по грязюке — короче. Не зря ж сказки про короткую тропинку через темный лес рассказывают ;-) Природа у людей такая ;-)
Приветствую, друзья! Хочу собрать i-bem.js из bem-core, чтобы использовать его на проекте без полного БЭМ-стека. И я собрал его, но что то не фурычит он. Видимо я что-то не правильно делаю. Подтолкните в нужном направлении. Вот мой порядок действий:
common.bundles\index
создал файлindex.bemjson.js
с таким содержимым:`bem make
i-bem.js
В итоге после открытия страницы в консоль ничего не выводится... Что не так в моих действиях?