Всем привет и доброго дня! Читаю документацию и пробую поймать элементарное событие с потомка. Получается чуть менее, чем никак(((
Делаю так:
Кусок bemjson
{
block : 'test',
js : true,
content : {
block : 'test2',
js : true,
content : 'test2 content'
}
}
Модули:
modules.define('test', ['i-bem__dom', 'test2'], function(provide, BEMDOM, test2) {
BEMDOM.decl('test', {
onSetMod : {
'js': {
'inited' : function() {
test2.on(this.domElem, 'click', this._onClick);
}
}
},
_onClick : function(e) {
console.log('hi test');
}
});
provide(BEMDOM);
});
modules.define('test2', ['i-bem__dom'], function(provide, BEMDOM) {
BEMDOM.decl('test2', {
onSetMod : {
'js' : {
'inited': function() {
this.bindTo('click', this._onClick);
}
}
},
_onClick : function(e) {
this.emit('click');
console.log('hi test2');
}
});
provide(BEMDOM);
});
Депсы
test2.deps.js
[{
mustDeps : [
{ block : 'i-bem', elem : 'dom' },
{ block : 'test2' }
]
}]
test.deps.js
[{
mustDeps : [
{ block : 'i-bem', elem : 'dom' }
]
}]
Блоки инциализируются. Ошибок нет. При клике на блоке test2 в консоль падает только 'hi test2'.
Второе. Пробовал через this.findBlockInside('child').on('click', this._onFilterClick, this) задействует только первый дочерний блок... Это правильное его поведение?
Третье. Что это за штука такая: BEMDOM.blocks['blockname'].on(......... Можно где по ней найти документацию? Она поддерживается?
Четвёртое. В коментах тут встречал, что есть ещё каналы. Почитал про них здесь: https://ru.bem.info/libs/bem-core/v2.8.0/desktop/events/#Элемент-channels-блока-events
Это вроде замены findBlockOutside(???).on() или можно использовать повсеместно? Или я вообще неправильно понял назначение каналов?
Кажется так:
test2.on('click', this._onClick);
Попробовал "test2.on('click', this._onClick);" - результат не изменился
@Roman-Fov
this.domElem.bindTo
;)this.domElem.bindTo('click', this._onClick); вместо this.bindTo('click', this._onClick);
Должно так работать