Всем привет! Такой вопрос, если я делаю так:
provide(BEMDOM.decl(this.name, {
onSetMod : {
'js' : {
'inited' : function() {
this.setMod('calling');
}
},
'calling' : function() {
}
}
}));
, то у меня все работает, но если я прописываю модификатор mods : { calling : true }, в bemjson файле и оставляю так:
provide(BEMDOM.decl(this.name, {
onSetMod : {
'calling' : function() {
}
}
}));
работать перестает. Почему? (Полный код не привожу, думаю смысл понятен).
Потому что onSetMod отрабатывает только при установке модификатора. Если установка была в bemjson — считается, что он уже установлен. При инициализации не происходит установки, хотя для меня это тоже странно, почему работает именно так.
Хотелось бы отдельно обсудить какие плюсы и минусы есть у безусловной установки. Возможно, стоит подумать об изменении поведения в этом месте.
/cc @veged @tadatuta
Жаль, хотел разделить действие одного блока, разбив его по модификаторам (если внутри родительского блока вложен блок link, один модификатор, если вложен button, то другой, если checkbox - третий). Теперь, наверное, придется условные выражения писать.
@zxqfox Обсуждали несколько раз. Думаю, в недрах форума можно даже какие-то артефакты найти.
@Sergei-b84 можно в зависимости от модификатора по-разному определять кастомный метод
init, который вызывать наonSetMod -> js -> inited. Это решает задачу?@tadatuta Ради людей-то можно и еще раз обсудить, чтобы они в будущем не натыкались. Правда же?)
Процитирую @veged из закромов родины:
До issue, вроде, дело тогда так и не дошло, но, насколько я понимаю, такое поведение едва ли может появиться до какого-нибудь реактивного
bem-core@v4.Соглашусь, что это мажорное изменение, да.
Давайте молиться, чтобы у нас появилось свободное время ;-)
Думаю, что не решит. Ранее мы с Вами обсуждали блок tooltip. который привязывали к ссылке (блок link). Теперь же у меня добавились еще блоки chekbox и button. В будущем возможно еще что-то добавится. В связи с чем, я хотел расширить возможности блока tooltip, вешая на него такие модификаторы (link: true, checkbox: true, button: true ..). И расписать код tooltip.js
@Sergei-b84 Вроде это не противоречит тому решению, которое я предложил:
Другое дело, что если других отличий не будет, то это можно сократить до одного общего кода:
Либо можно воспользоваться тем фактом, что все перечисленные блоки наследуются от
control, так что достаточно повесить событие на него вместоlinkи должно работать ровно как в исходном варианте, вообще без модификаторов.