Всем привет. Подскажите, пожалуйста, как правильно отреагировать на событие клик по первому блоку button в такой DOM-моделе
{
block : 'control-group',
content : [
{
block : 'input',
mix: { block: 'header', elem: 'search-input' },
mods : { theme : 'islands', size : 'l', type : 'search' }
},
{
block : 'button',
mods : { theme : 'islands', size : 'l' },
icon : {
block : 'icon',
mods : { type : 'earth' }
}
},
{
block : 'button',
mods : { theme : 'islands', size : 'l', type: 'submit' },
text : 'Поиск'
}
]
}
Пока, все что пробовал, дает реакцию на клик по любой кнопке.
Обычно кнопка, помимо того, что она является универсальным блоком
button
, миксуется еще с элементом своего родителя. Если нафантазировать, что перед нами некая поисковая форма, которая позволяет поискать по сайту (с помощьюbutton_type_submit
) и по всему интернету с помощью первой кнопки, то родитель будет называтьсяsearch-form
, а сама кнопкаsearch-form__internet
. Тогда нужный код получится примерно такой:этот же код можно переписать и на отложенную инициализацию:
Спасибо @tadatuta, но во втором примере метод liveBindTo должен запускать callback при повторяющихся кликах. Но этого не происходит.Один раз отрабатывает и все. Первый вариант, работает хорошо.
вот мой код по второму примеру (с ленивой инициализацией).
@Sergei-b84 причина в том, что
modal
в момент первого использования переносится к</body>
, чтобы не было проблем с{ overflow: hidden }
на родителе и т.п., так что в следующий разfindBlockInside()
ее не находит.Решается это простым кэшированием найденного
modal
(оно и в принципе правильно — ни к чему лишний раз по DOM искать):