На одной ноде находятся два блока:
<section class="siteSettings theme i-bem" data-bem='{"siteSettings": {}, "theme": {}}'>
В функции-инициализации блока theme происходит подписка на БЭМ событие changeTheme блока siteSettings. Внутри же функции-инициализации блока siteSettings происходит генерация события changeTheme. Но обработчик внутри блока theme не срабатывает, так как ещё не произошла инициализация блока theme, а лишь произошла инициализация блока siteSettings... Как побороть, может есть решения предлагаемые самим i-bem? Спасибо.
@pavel06081991 должно быть достаточно явно прописать зависимость блока
siteSettings
от блокаtheme
средствами модульной системы:Не, вы не совсем правильно поняли. Вот код, так будет понятнее о чем речь:
Так вот, алерта "Hello, world!" я не получу.
То есть инициализация копии блока siteSettings происходит раньше, чем копии блока theme. То есть на момент вызова this.emit('changeTheme'); в блоке siteSettings, подписки насобытие this.params.siteSettings.on('changeTheme' в блоке theme ещё не произошло.
Не понятно, какая задача решается. Если есть какой-то блок, который меняет темы, то можно сделать у него не только событие смены темы, но и метод
getTheme
и вместе с подпиской на событие получать текущую тему.Спасибо, так и сделал. Только хочу прояснить один момент. Предположим есть блок A и B. В момент инициализации блока A мы ищем блок B findBlockOn('B') и вызываем метод getThemeName у найденого блока B. Правильно ли я понимаю, что когда мы вызывваем метод findBlockOn или любой другой метод поиска блока, то, если этот разыскиваемый блок еще не был инициализирован, то производится его инициализации и уж только потом метод findBlockOn возвращает копиию блока?
Конечно, иначе что вернет
findBlockOn
?Без понятия, поэтому и уточняю, чтобы в голове картинку иметь происходящего :)
Если говорить языком ООП,
findBlockOn('my-block')
возвращает инстанс классаmy-block
, связанный с дом-нодой текущего блока. Никак нельзя получить инстанс класса, не проинициализировав (проинстанциировав) его)