Przepływ zdarzeń

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Programy Flash Player i AIR wywołują obiekty zdarzeń przy każdym wystąpieniu zdarzenia. Jeśli cel zdarzenia nie znajduje się na liście wyświetlania, program Flash Player lub AIR wywołuje obiekt zdarzenia bezpośrednio do tego celu zdarzenia. Przykład: program Flash Player wywołuje obiekt zdarzenia progress bezpośrednio do obiektu URLStream. Jeśli jednak cel zdarzenia znajduje się na liście wyświetlania, wówczas program Flash Player wywołuje obiekt zdarzenia do listy wyświetlania, a obiekt zdarzenia przechodzi przez listę wyświetlania do celu zdarzenia.

Strumień zdarzenia opisuje sposób, w jaki obiekt zdarzenia przechodzi przez listę wyświetlania. Lista wyświetlania jest zorganizowana w hierarchię, która może zostać opisana jako drzewo. U góry hierarchii listy wyświetlania znajduje się stół montażowy, który jest specjalnym kontenerem obiektu wyświetlanego — jest to najwyższy poziom listy wyświetlania. Stół montażowy jest reprezentowany przez klasę flash.display.Stage, a dostęp do niego można uzyskać tylko za pośrednictwem obiektu wyświetlanego. Każdy obiekt wyświetlany zawiera właściwość o nazwie stage , która odwołuje się do stołu montażowego w danej aplikacji.

Gdy program Flash Player lub AIR wywoła obiekt zdarzenia dla zdarzenia powiązanego z listą wyświetlania, ten obiekt zdarzenia pokonuje drogę od stołu montażowego do węzła docelowego . Specyfikacja DOM Events Specification definiuje węzeł docelowy jako węzeł reprezentujący cel zdarzenia. Innymi słowy: węzeł docelowy jest obiektem listy wyświetlania, w którym wystąpiło zdarzenie. Na przykład: gdy użytkownik kliknie obiekt wyświetlania o nazwie child1 , program Flash Player lub AIR wywoła obiekt zdarzenia, wykorzystując child1 w roli węzła docelowego.

Strumień zdarzenia jest koncepcyjnie podzielony na trzy części. Pierwsza część jest nazywana fazą przechwytywania; ta faza zawiera wszystkie węzły ze stołu montażowego do obiektu nadrzędnego węzła docelowego. Druga część jest nazywana fazą docelową, która obejmuje tylko węzeł docelowy. Trzecia część jest nazywana fazą propagacji. Faza propagacji zawiera węzły napotkane w drodze powrotnej z obiektu nadrzędnego węzła docelowego do stołu montażowego.

Nazwy faz będą bardziej zrozumiałe, gdy wyobrazimy sobie listę wyświetlania jako pionową hierarchię ze stołem montażowym na górze, co przedstawiono na poniższym schemacie:

Gdy użytkownik kliknie węzeł Child1 Node , program Flash Player lub AIR wprowadzi obiekt zdarzenia do strumienia zdarzenia. Na poniższej ilustracji przedstawiono drogę obiektu od stołu montażowego ( Stage ), do węzła Parent Node , a następnie do węzła Child1 Node, . Potem obiekt „propaguje” z powrotem do węzła Stage , przechodząc ponownie przez węzeł Parent Node w drodze do Stage .

W tym przykładzie faza przechwytywania obejmuje węzły Stage i Parent Node podczas wstępnego przesuwania w dół. Faza docelowa to czas w węźle Child1 Node . Faza propagacji obejmuje węzły Parent Node i Stage , ponieważ znajdują się one na drodze powrotnej do węzła głównego.

Strumień zdarzenia stanowi część bardziej wydajnego systemu obsługi zdarzeń niż był wcześniej dostępny dla programistów ActionScript. W poprzednich wersjach ActionScript strumień zdarzeń nie istniał, co oznaczało, że detektory zdarzeń mogły być dodawane tylko do obiektu, który wygenerował zdarzenie. W języku ActionScript 3.0 detektory zdarzeń można dodawać nie tylko do węzła docelowego, ale również do wszystkich węzłów w strumieniu zdarzenia.

Możliwość dodawania detektorów zdarzeń do strumienia zdarzenia jest użyteczna wówczas, gdy składnik interfejsu użytkownika zawiera więcej niż jeden obiekt. Na przykład: obiekt przycisku często zawiera obiekt tekstu, który służy jako etykieta przycisku. Bez możliwości dodawania detektorów zdarzeń do strumienia zdarzeń użytkownik musiałby dodać detektor do obiektu przycisku i obiektu tekstu — tylko wówczas otrzymałby powiadomienie o zdarzeniach click, które wystąpiły w dowolnym miejscu przycisku. Dzięki strumieniowi zdarzeń możliwe jest umieszczenie pojedynczego detektora zdarzeń na obiekcie przycisku — ten detektor będzie obsługiwał zdarzenia click, jakie wystąpią na obiekcie tekstu lub na obszarach obiektu przycisku, które nie są zasłonięte obiektem tekstu.

Jednak nie każdy obiekt zdarzenia uczestniczy we wszystkich fazach strumienia zdarzenia. Niektóre typy zdarzeń, takie jak enterFrame i init są wywoływane bezpośrednio do węzła docelowego i nie uczestniczą w fazie przechwytywania ani w fazie propagacji. Dla innych zdarzeń docelowe mogą być takie obiekty, które nie znajdują się na liście wyświetlania, takie jak zdarzenia wywoływane dla instancji klasy Socket. Te obiekty zdarzeń będą również przepływały bezpośrednio do obiektu docelowego i nie będą uczestniczyły w fazie przechwytywania ani fazie propagacji.

Informacje o zachowaniu określonych typów zdarzeń można uzyskać w dokumentacji API lub zapoznać się z właściwościami obiektu. Sprawdzanie właściwości obiektu zdarzenia zostało opisane w poniższej sekcji.