Я пытаюсь обдумать общие принципы работы и принципы распределения событий в управляемых событиями (под) системах.
Хотя я несколько раз использовал его, например, в Javascript, Flash (Actionscript 2 и 3) и даже когда-то создавал для себя простую систему диспетчеризации событий в PHP, я никогда по-настоящему не понимал всплывающих событий и / или распространение это хорошо.
Первый вопрос:
является ли пузырение события синонимом распространения события?
Второй вопрос:
правильно ли я понимаю, что когда событие «пузырится», это означает, что оно «перемещается» вверх по иерархии объектов?
Третий и самый важный вопрос:
верно ли мое понимание вопроса 2; как это «продвижение» вверх по иерархии объектов обычно осуществляется?
Означает ли это, что родительский объект «повторно отправляет» то же событие своему родительскому объекту (пока не достигнет корневого объекта)? И если так; все эти объекты в иерархии должны прислушиваться к своим дочерним элементам для этих событий, или мне не хватает чего-то жизненно важного принципа в моем понимании всплытия событий, когда нет необходимости позволять родительскому объекту регистрировать себя в качестве слушателей событий дочерних объектов?
Если бы вы могли проиллюстрировать эти основные принципы с помощью простого псевдокода, я был бы более чем благодарен.
источник
Ответы:
Нет. Пузырьки - это форма распространения событий, но ее нельзя использовать как синоним. Распространение - это общий термин для обозначения события. Пузырьки - это особая стратегия распространения событий.
Да. Bubbling означает, что он идет вверх по иерархии, в отличие от туннелирования , что означает, что он идет от верхнего элемента вниз или маршрутизации , что означает, что следующим объектом, который получит событие, может быть все, что вы выберете.
Довольно легко. В вашей визуальной иерархии элементы управления имеют ссылку на своего родителя / визуальный элемент верхнего уровня или могут получить его где-нибудь. Поэтому, когда они фиксируют событие, они просто уведомляют об этом своего родителя, который уведомляет об этом своего родителя и т. Д.
Псевдокод подобен этому для любого элемента управления UI:
Как сказал blueberryfields, не обязательно быть прямым родителем, который получит событие следующим. Вы также можете реализовать это так:
источник
Первый ответ:
Пузырьки событий - это один конкретный алгоритм, управляющий распространением событий.
Второй ответ:
Нет, пузыри не обязательно связаны с какой-либо иерархией. То, как объекты представляются внутри или где-либо еще, на самом деле не имеет значения для правильной работы алгоритма. В идеале, когда событие всплывает, оно расширяется наружу от самого видимого элемента на экране до самого видимого элемента на экране.
Третий ответ:
Детали реализации могут сильно различаться в зависимости от того, как реализованы внутренние компоненты каждого (браузера).
bubbling
Алгоритм зависит от видеоряда на экране. Если инкапсулирующий элемент выше в иерархии наследования, чем внутренний элемент, то пузыри могут быть реализованы, например, с использованием стандартных механизмов наследования в языке. Но это не обязательно так: у вас может быть специальный механизм, который может интерпретировать как внутренние структуры, так и их видимость на экране, и распространять события в соответствии с алгоритмом, игнорируя при этом внутреннюю организацию.источник