У объекта event
, который приезжает в обработчик БЭМ-события первым элементом, есть методы preventDefault()
и stopPropagation()
, но если вызвать e.stopPropagation()
в обработчике на вложенном блоке, то событие всё равно всплывает в родительский.
Сейчас проверяю в обработчике в родительском блоке
someEvenHandler(e, data) {
if (! e.isPropagationStopped()) {
this.doSomething();
}
}
Но насколько это всё правильно?
stopPropagation
это же отмена всплытия по дом-дереву. Получается, твой вопрос: «Почему событие после stopPropagation всплывает по бэм-дереву». Так?Вопрос, скорее, политического характера, на мой взгляд. Возможно, и нужно.
Ну тут-то свой
stopPropagation
, и не совсем понятно, как с ним взаимодействовать. Документации на эту тему я не нашёл, не исключаю, что плохо искал.cc @dfilatov
BEM-событие, конечно же, должно перестать всплывать по bem-дереву при вызове
stopPropagation()
. В v2 поддержки этого сейчас нет, но добавить вроде совсем просто, нужно завести задачу.https://github.com/bem/bem-core/issues/1265
@h4 А как именно происходит подписка обоих хэндлеров (того что делает
stopPropagation()
и того который потом проверяетisPropagationStopped()
? ЧерезliveInit*
или через подписку в контексте dom-элемента?А вот этого я уже не скажу, потому что работаю теперь в другой компании.
Штука оченно полезная. Я наивно полагал, что она реализована и собрал граблей...
Как происходит подписка?)21:49, 30 марта 2016 г., Evgeniy Baranov notifications@github.com:Штука оченно полезная. Я наивно полагал, что она реализована и собрал граблей... —You are receiving this because you commented.Reply to this email directly or view it on GitHub -- Отправлено из мобильного приложения Яндекс.Почты
@zxqfox А это имеет значение?