Хочу доопределить инициализацию блока dropdown
.
Нужно что бы он инициализировался когда инициализируется блок на котором он примиксован. Как мы знаем у dropdown
свитчер блок рисуется в зависимости от его модификатора. А ещё в моду switcher
можно засунуть любой другой блок и он все равно на него замиксуется.
Как правильно решить задачу:
Инициализируем dropdown когда блок в моде switcher заинициализировался (*_js_inited
) ну или по ховеру на контролле (*_hovered
).
хочется (но не можется) в live
для dropdown
написать что-то типа такого:
this.liveInitOnBlockEvent(
{ modName: 'js', modVal: 'inited' },
this.getMod('switcher') // или любая другая функция которая вернет тот самый правильный блок
);
Если мы никак не можем получить список тех блоков с которыми можно работать, то подобное нужно будет писать для каждого модификатора и блока отдельно или даже в отдельных файлах. А что если нам нужно связка модификаторов?
В общем подскажите. Завязываться на dom событие в этом случае кажется нифига не круто.
cc/ @tadatuta @dfilatov
Пришло в голову простое решение, которое не универсальное, но твой конкретный кейс, кажется, решает.
А ты не хочешь в файлы модификатора добавить прослушку каждого? Тогда у тебя нужный код приедет по зависимостям и не нужно будет в рантайме искать модификатор, чтобы понять какой блок надо искать внутри. И даже если будут слушаться оба только в случае — значит на странице присутсвует оба варианта дропдауна, но в нашем случае — один другому не помешает.
Грубо, как-то так:
и такой же для link.
Только не забывай
return this.__base();
везде.@zxqfox примерно так и закостылил.
Но это нужно сделать 2 файла... написать дофига копипаста...
И вообще нужно с этим работать по другому модификатору.
У меня есть модификатор
dropdowin_mode_hover
он может использоваться и сdropdowin_switcher_link
и cdropdowin_switcher_button
пришлось написать такое
повторюсь, это выглядит костыльно. но если бы был метод который может вернуть либо модификатор в live или имя блока который в
this._switcher
выглядело бы все сильно лучше