Добрый день, подскажите пожалуйста как правильно обращаться к элементу родительского блока? С учетом того что блок может быть разный
<div class="block1">
<span class="block1-element"></span>
<div class="block2"></div>
</div>
Как из блока 2 получить block1-element? Сейчас делаю так
this.findBlockOutside('block1').elem('element')
Но проблема в том что блок может называться по другому
Надо понять вашу задачу. Сейчас не понятно почему дочернему блоку понадобилось что-то от родительского, а не наоборот. Скорее всего у вас ошибочно выполнено разделение на блоки и элементы.
Наверное, лучше всего не напрямую это делать, а через управляющий блок и/или события. Чтобы что-то более конкретное подсказать — нужно понять задачу, как уже было отмечено ;-)
В данном случае block2 это календарь а block1-element это label куда необходимо подставлять значение выбранной даты
В данном случае календарь должен просто бросить событие
changed
, а родитель будучи подписан на него будет изменять свой элемент. Таким образом вы сохраните блок календаря максимально независимым. Кроме этого логику можно вынести и на спец блок контроллер, как подсказывает @zxqfox. Опять же зависит от ваших задач.А не подскажите как это можно реализовать? Интересует как родительский блок подписать на событие дочернего, и как правильно бросить событие changed
@serhioone Я бы дочернему навесил элемент и из родительского, зная что элемент может использоваться только для контрола календаря, работал бы с элементом. В элементе, который знает про календарь, на который он навешивается, работал бы с блоком календаря через .getVal. Но это форма какая-то получается ;-)
Можно и прямо из родительского подписаться на события блока внутри (если он всегда будет в этом блоке) и при изменении менять элемент:
;-) да.
Ну и конечно читаем FM
Судя по всему у нас используется bem-bl сборка а там судя по всему нет метода emit =(
Есть еще какие способы узнать что дочерний блок изменился? или что в нем было выполнено действие?
@serhioone В
bem-bl
метод называетсяtrigger()
. Вbem-core
его переименовали вemit()
, чтобы было консистентно для браузера иnode.js
.Спасибо большое, все больше и больше нравится бэм