Próbuję owinąć głowę wokół ogólnych zasad działania i zasad wywoływania zdarzeń w (pod) systemach sterowanych zdarzeniami.
Chociaż korzystałem z niego kilkakrotnie, na przykład w Javascript, Flash (ActionScript 2 i 3), a nawet stworzyłem dla siebie prosty system wywoływania zdarzeń w PHP, nigdy tak naprawdę nie rozumiałem propagacji zdarzeń i / lub tak dobrze się rozmnaża.
Pierwsze pytanie:
czy propagacja zdarzeń jest synonimem propagacji zdarzeń?
Drugie pytanie: czy
mam rację, rozumiejąc, że gdy wydarzenie „pęka”, oznacza to, że „przesuwa się” ono w górę hierarchii obiektów?
Trzecie i najważniejsze pytanie:
czy moje rozumienie w pytaniu 2 jest prawidłowe; w jaki sposób generalnie realizuje się to „przesuwanie” hierarchii obiektów?
Czy to na ogół oznacza, że obiekt nadrzędny „redispatches” to samo zdarzenie do jego rodzica (aż osiągnie obiektu root)? A jeśli tak; czy wszystkie te obiekty w hierarchii muszą słuchać swoich dzieci w związku z tymi zdarzeniami, czy też brakuje mi czegoś istotnego w moim rozumieniu na temat propagacji zdarzeń, gdy nie ma potrzeby, aby obiekt nadrzędny rejestrował je jako osoby nasłuchujące zdarzeń podrzędnych?
Gdybyś mógł zilustrować te podstawowe zasady za pomocą jakiegoś prostego pseudo kodu, byłbym bardziej niż wdzięczny.
źródło
Odpowiedzi:
Nie. Bubbling jest formą propagacji zdarzeń, ale nie może być używany jako synonim. Rozmnażanie to ogólny termin przekazywania wydarzenia. Bubbling to specyficzna strategia propagacji zdarzeń.
Tak. Bąbelkowanie oznacza, że idzie w górę hierarchii, w przeciwieństwie do tunelowania , co oznacza, że idzie od górnego elementu w dół lub routingu , co oznacza, że następnym obiektem, który odbierze zdarzenie, może być dowolnie wybrany.
Całkiem łatwe. W twojej hierarchii wizualnej formanty mają odniesienie do ich elementów nadrzędnych / wizualnych najwyższego poziomu lub mogą je gdzieś uzyskać. Więc kiedy przechwytują zdarzenie, po prostu powiadamiają o tym swojego rodzica, co powiadamia o tym rodzica itp.
Pseudo-kod jest taki jak w przypadku dowolnej kontrolki interfejsu użytkownika:
Jak powiedziały blueberryfields, nie musi być bezpośrednim rodzicem, który odbierze wydarzenie w następnej kolejności. Możesz również zaimplementować w ten sposób:
źródło
Pierwsza odpowiedź:
Bubbing zdarzeń jest jednym z określonych algorytmów kierujących propagacją zdarzeń.
Druga odpowiedź:
Nie, propagacja nie musi być związana z żadną hierarchią. Sposób, w jaki obiekty są reprezentowane wewnętrznie lub w innym miejscu, nie ma znaczenia, aby algorytm działał poprawnie. Idealnie, gdy wydarzenie pęka, rozszerza się na zewnątrz od najbardziej widocznego elementu na ekranie, aż do najbardziej widocznego elementu na ekranie.
Trzecia odpowiedź:
Szczegóły implementacji mogą się bardzo różnić w zależności od sposobu implementacji elementów wewnętrznych (przeglądarki).
bubbling
Algorytm zależy od wizualizacji na ekranie. Jeśli element enkapsulujący znajduje się wyżej w hierarchii dziedziczenia niż element wewnętrzny, propagowanie można zaimplementować na przykład przy użyciu standardowych mechanizmów dziedziczenia w języku. Ale niekoniecznie jest to prawdą - możesz mieć specjalistyczny mechanizm, który może interpretować zarówno struktury wewnętrzne, jak i ich widoczność na ekranie oraz propagować zdarzenia zgodnie z algorytmem, ignorując wewnętrzną organizację.źródło