Ich versuche, mich mit den allgemeinen Funktionsweisen und Prinzipien des Event-Dispatchings in ereignisgesteuerten (Sub-) Systemen zu beschäftigen.
Obwohl ich es schon einige Male verwendet habe, zum Beispiel in Javascript, Flash (Actionscript 2 und 3) und sogar ein einfaches Event-Dispatching-System in PHP für mich selbst erstellt habe, habe ich Event-Bubbling und / oder nie wirklich verstanden Ausbreitung so gut.
Erste Frage:
Ist Ereignisblasen ein Synonym für Ereignisausbreitung?
Zweite Frage:
Stimmt es, dass ein Ereignis, wenn es "sprudelt", bedeutet, dass es in der Hierarchie der Objekte "verschoben" wird?
Dritte und wichtigste Frage:
Wenn mein Verständnis in Frage 2 richtig ist; Wie wird die Hierarchie der allgemein implementierten Objekte "nach oben" verschoben?
Bedeutet dies im Allgemeinen, dass das übergeordnete Objekt dasselbe Ereignis an sein übergeordnetes Objekt "erneut verteilt" (bis es das Stammobjekt erreicht)? Und wenn; Müssen all diese Objekte in der Hierarchie auf ihre Kinder für diese Ereignisse hören, oder fehlt mir ein wichtiges Prinzip in meinem Verständnis von Ereignisblasen, bei dem es nicht erforderlich ist, dass das übergeordnete Objekt sie selbst als Zuhörer von Ereignissen mit untergeordneten Objekten registriert?
Wenn Sie diese Grundprinzipien anhand eines einfachen Pseudocodes veranschaulichen könnten, wäre ich mehr als dankbar.
quelle
Antworten:
Nein. Blasenbildung ist eine Form der Ereignisausbreitung, kann jedoch nicht als Synonym verwendet werden. Ausbreitung ist ein allgemeiner Begriff für die Weitergabe eines Ereignisses. Blasenbildung ist eine spezifische Strategie der Ereignisausbreitung.
Ja. Bubbling bedeutet, dass die Hierarchie nach oben geht, im Gegensatz zum Tunneln , dh vom obersten Element nach unten oder vom Routing , was bedeutet, dass das nächste Objekt, das das Ereignis empfängt, alles sein kann, was Sie auswählen.
Ziemlich einfach. In Ihrer visuellen Hierarchie haben die Steuerelemente einen Verweis auf das übergeordnete Element / das visuelle Element der obersten Ebene oder können ihn irgendwo abrufen. Wenn sie also ein Ereignis erfassen, benachrichtigen sie nur das übergeordnete Ereignis, das das übergeordnete Element darüber benachrichtigt usw.
Pseudocode ist für jedes UI-Steuerelement wie folgt:
Wie Blueberryfields sagte, muss es nicht der direkte Elternteil sein, der das Ereignis als nächstes erhält. Sie könnten auch so implementieren:
quelle
Erste Antwort:
Ereignisblasenbildung ist ein spezifischer Algorithmus, der die Ereignisausbreitung steuert.
Zweite Antwort:
Nein, das Sprudeln hängt nicht unbedingt mit einer Hierarchie zusammen. Wie Objekte intern oder anderswo dargestellt werden, spielt keine Rolle, damit der Algorithmus ordnungsgemäß funktioniert. Wenn ein Ereignis sprudelt, dehnt es sich im Idealfall vom innersten sichtbaren Element auf dem Bildschirm nach außen bis zum äußersten sichtbaren Element auf dem Bildschirm aus.
Dritte Antwort:
Die Implementierungsdetails können sehr unterschiedlich sein, je nachdem, wie die Interna der einzelnen (Browser) implementiert sind. Der
bubbling
Algorithmus hängt von der Darstellung auf dem Bildschirm ab. Wenn ein Kapselungselement in der Vererbungshierarchie höher ist als ein inneres Element, kann das Sprudeln beispielsweise unter Verwendung von Standardvererbungsmechanismen in der Sprache implementiert werden. Dies ist jedoch nicht unbedingt der Fall. Möglicherweise verfügen Sie über einen speziellen Mechanismus, mit dem sowohl interne Strukturen als auch deren Sichtbarkeit auf dem Bildschirm interpretiert und Ereignisse gemäß dem Algorithmus weitergegeben werden können, während die interne Organisation ignoriert wird.quelle