Добрый день. Имею такой код:
modules.define('input', ['i-bem-dom'], function (provide, bemDom) {
provide(bemDom.declBlock(this.name, {
onSetMod: {
'js': {
'inited': function () {
this._domEvents().on('focusin', this._focusIn);
this._domEvents().on('focusout', this._focusOut);
}
}
},
_focusIn: function () {
this.setMod('focus');
},
_focusOut: function () {
this.delMod('focus');
}
}, {
lazyInit: true,
onInit: function () {
this._domEvents().on('focusin', this.prototype._focusIn());
}
}));
});
Выдаёт ошибку:
Uncaught TypeError: Cannot read property 'focus' of undefined
at l.setMod (jquery.js:9816)
at l._focusIn (aside.js:89)
at Function.onInit (aside.js:105)
at Function._processInit (jquery.js:9816)
at Function._processInit (jquery.js:9816)
at h (jquery.js:9816)
at d (jquery.js:9816)
at HTMLLabelElement.<anonymous> (jquery.js:9816)
at Function.each (jquery.js:365)
at jQuery.fn.init.each (jquery.js:137)
Порядок подключения у меня такой: Сначала подключается jQuery 2.2.4 (проверял с версией 3, такая же ошибка) Далее bem-core.js из библиотеки bem-core-dist Далее вышеприведённый скрипт. Всё подключается в шапке без оборачивания в document.ready и тому подобное.
Пример вёрстки:
<input class="input i-bem" data-bem="{"input": {} }">
Такие кавычки в data-bem генерятся автоматически, т.к. пишу на паге, в инспекторе выглядит ок. Если убрать весь второй объект с lazyInit, то всё работает нормально. Что я делаю не так?
Вы должны передать функцию, а не результат ее выполнения. Поэтому скобки лишние.
Точно, всё заработало. Спасибо, пойду отсыпаться)