J'essaie de comprendre les rouages et les principes généraux de la répartition des événements dans les (sous-) systèmes pilotés par les événements.
Bien que je l'aie utilisé à plusieurs reprises, par exemple dans Javascript, Flash (Actionscript 2 et 3) et que j'ai même créé un simple système de répartition d'événements en PHP pour moi à un moment donné, je n'ai jamais vraiment compris le bouillonnement d'événements et / ou propagation aussi bien.
Première question: la
propagation d'événements est-elle synonyme de propagation d'événements?
Deuxième question:
ai-je raison de comprendre que lorsqu'un événement "bouillonne", cela signifie qu'il est "déplacé" dans la hiérarchie des objets?
Troisième et plus importante question:
si ma compréhension de la question 2 est correcte; comment cette "montée" de la hiérarchie des objets est-elle généralement mise en œuvre?
Cela signifie-t-il généralement que l'objet parent "redistribue" le même événement à son parent (jusqu'à ce qu'il atteigne l'objet racine)? Et si oui; tous ces objets de la hiérarchie doivent-ils écouter leurs enfants pour ces événements, ou manque-t-il quelque chose de vital dans ma compréhension de la propagation d'événements, où il n'est pas nécessaire que l'objet parent s'enregistre lui-même en tant qu'écouteurs d'événements d'objet enfant?
Si vous pouviez illustrer ces principes de base au moyen d'un pseudo-code simple, je vous en serais plus que reconnaissant.
la source
Réponses:
Non. Le bullage est une forme de propagation d'événements, mais il ne peut pas être utilisé comme synonyme. La propagation est un terme général pour transmettre un événement. Le bullage est une stratégie spécifique de propagation d'événements.
Oui. Le bullage signifie qu'il monte dans la hiérarchie, par opposition au tunneling , ce qui signifie qu'il va de l'élément supérieur vers le bas ou le routage , ce qui signifie que le prochain objet à recevoir l'événement peut être tout ce que vous choisissez.
Plutôt facile. Dans votre hiérarchie visuelle, les contrôles ont une référence à leur parent / leur visuel de niveau supérieur ou peuvent l'obtenir quelque part. Ainsi, lorsqu'ils capturent un événement, ils en informent simplement son parent, qui en informe son parent, etc.
Le pseudo-code est le suivant pour tout contrôle d'interface utilisateur:
Comme l'a dit blueberryfields, ce n'est pas nécessairement le parent direct qui reçoit l'événement ensuite. Vous pouvez également implémenter comme ceci:
la source
Première réponse:
Le bullage d'événements est un algorithme spécifique guidant la propagation des événements.
Deuxième réponse:
Non, le bouillonnement n'est pas nécessairement lié à une hiérarchie. La façon dont les objets sont représentés en interne ou ailleurs n'a pas vraiment d'importance pour que l'algorithme fonctionne correctement. Idéalement, lorsqu'un événement bouillonne, il se développe vers l'extérieur depuis l'élément visible le plus à l'intérieur de l'écran, jusqu'à l'élément visible le plus à l'extérieur de l'écran.
Troisième réponse:
Les détails de mise en œuvre peuvent varier considérablement en fonction de la façon dont les composants internes de chacun (navigateur) sont mis en œuvre. L'
bubbling
algorithme dépend des visuels à l'écran. Si un élément d'encapsulation est plus élevé dans la hiérarchie d'héritage qu'un élément interne, le bullage peut être implémenté à l'aide de mécanismes d'héritage standard dans le langage, par exemple. Mais ce n'est pas nécessairement vrai - vous pouvez avoir un mécanisme spécialisé qui peut interpréter à la fois les structures internes et leur visibilité à l'écran, et propager les événements selon l'algorithme tout en ignorant l'organisation interne.la source