У блоков в bem.js представлении есть методы экземпляра и статические методы, Я хочу из одного блока обращаться к другому к примеру по event mouseover я показываю popup. я вешаю обработчик на блок который ловит событие такого содержания:
_mouseover: function(e){
columnPopup.openByModsAlign(this._align);
},
Сам же блок columnPopup он находится в зависимостях у этого блока, columnPopup есть статический метод openByModsAlign который не православным методом с помощью jquery добавляет модификатор,
openByModsAlign : function(mods) {
$('.column-popup_align_' + mods).addClass('column-popup_visible');
$('.column-popup_align_' + mods).removeClass('column-popup_closing');
}
Хочется использовать как в методах экземпляра конструкцию типа
openByModsAlign : function(mods) {
this.setMod('visible');
this.delMod('closing');
}
Как правильно заюзать метод в моем случае? То что я написал это временный костыль который на мой взгляд не верен, в рамках БЭМА
@AndreyGladkov Например, так:
Как вариант, если есть уверенность, что
columnPopup
гарантированно может быть только один на странице, можно в момент инициализации сохранять ссылку на него вthis.__self._instance
.Наверное я плохо выразился, у меня два разных блока, к примеру блок link, по ховеру на него вызывается метод другого блока
Другой блок который показываем
Вот где комментарий хочу так, я имею виду что хочу в статическом методе получив модификатор, добавлять для него и удалить нужные мне используя i-bem.js , а не jquery. Надеюсь объяснил.
Очень жду помощи о том как же сделать это по методологии..
Подходят оба варианта, которые я предложил. Если вложить
column-popup
внутрьlink
(код не проверял, воспринимать как иллюстрацию идеи):Либо не вкладывая, но допуская, что попапы могут быть только по одному на каждый тип align:
Ну и можно через всякие pub/sub и прочие варианты реализовать.
@tadatuta во втором куске кода у блока
link
кажется забыл объявитьpopup