Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Miejsca docelowe zdarzeń są ważnym składnikiem modelu zdarzeń w programie Flash® Player i środowisku wykonawczym Adobe AIR. Miejsce docelowe zdarzeń jest punktem skupienia przepływu zdarzeń przez hierarchię listy wyświetlania. Gdy wystąpi zdarzenie, takie jak kliknięcie myszą lub naciśnięcie klawisza, zdarzenie jest wywoływane, tj. obiekt zdarzenia jest „wpuszczany” w przepływ zdarzeń biegnący od początku hierarchicznej listy wyświetlania. Obiekt zdarzenia przepływa tam i z powrotem od początku hierarchii do miejsca docelowego zdarzenia, a jego droga jest logicznie podzielona na trzy fazy: fazę przechwytywania, czyli drogę od początku hierarchii do ostatniego węzła przed miejscem docelowym zdarzenia; fazę miejsca docelowego, która obejmuje tylko węzeł będący miejscem docelowym; oraz fazę propagacji, która obejmuje wszystkie kolejne węzły napotkane w drodze powrotnej do początku listy wyświetlania.
Zasadniczo najprostszym sposobem wyposażenia własnej klasy w funkcjonalność pozwalającą na wywoływanie zdarzeń jest rozszerzenie klasy EventDispatcher. Jeśli jest to niemożliwe (tj. jeśli nasza klasa jest już rozszerzeniem innej klasy), można zamiast tego zaimplementować interfejs IEventDispatcher, utworzyć element EventDispatcher i napisać proste miejsca na wywołania kierujące do zagregowanej klasy EventDispatcher.
Metoda | Zdefiniowane przez | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Rejestruje obiekt detektora zdarzeń w obiekcie EventDispatcher, dzięki czemu detektor będzie otrzymywał powiadomienia o zdarzeniu. | IEventDispatcher | ||
Wywołuje zdarzenie, tj. kieruje je do przepływu zdarzeń. | IEventDispatcher | ||
Sprawdza, czy obiekt EventDispatcher zawiera jakiekolwiek detektory zarejestrowane dla konkretnego typu zdarzeń. | IEventDispatcher | ||
Usuwa detektor z obiektu EventDispatcher. | IEventDispatcher | ||
Sprawdza, czy detektor zdarzeń określonego typu jest zarejestrowany w tym obiekcie EventDispatcher lub jego elementach macierzystych. | IEventDispatcher |
addEventListener | () | metoda |
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Rejestruje obiekt detektora zdarzenia w obiekcie EventDispatcher, dzięki czemu detektor będzie otrzymywał powiadomienia o zdarzeniu. We wszystkich węzłach listy wyświetlania można rejestrować detektory zdarzeń reagujące na zdarzenia konkretnego typu, znajdujące się w określonej fazie i mające określony priorytet.
Po pomyślnym zarejestrowaniu detektora zdarzeń nie można zmienić jego priorytetu przez dodatkowe wywołania metody addEventListener()
. Aby zmienić priorytet detektora, należy najpierw wywołać metodę removeEventListener()
. Następnie można ponownie zarejestrować detektor z nowym poziomem priorytetu.
Po zarejestrowaniu detektora późniejsze wywołania metody addEventListener()
z różnymi wartościami type
albo useCapture
powodują rejestrowanie odrębnych detektorów. Na przykład detektor zarejestrowany z parametrem useCapture
ustawionym na true
wykrywa tylko zdarzenia w fazie przechwytywania. Po ponownym wywołaniu metody addEventListener()
z tym samym obiektem detektora, ale z parametrem useCapture
ustawionym na false
będą istniały dwa odrębne detektory: jeden wykrywający zdarzenia w fazie przechwytywania, a drugi wykrywający zdarzenia w fazach miejsca docelowego i propagacji.
Nie można zarejestrować detektora zdarzeń, który wykrywałby tylko zdarzenia w fazie miejsca docelowego lub tylko zdarzenia w fazie propagacji. Te fazy są sprzężone podczas rejestracji, ponieważ propagacja zachodzi tylko w przodkach węzła miejsca docelowego.
Gdy detektor zdarzeń przestanie być potrzebny, należy go usunąć, wywołując metodę EventDispatcher.removeEventListener()
; w przeciwnym razie mogą wystąpić problemy w zarządzaniu pamięcią. Obiekty z zarejestrowanymi detektorami zdarzeń nie są automatycznie usuwane z pamięci, ponieważ proces porządkowania pamięci nie usuwa obiektów, do których istnieją odwołania.
Skopiowanie instancji klasy EventDispatcher nie powoduje skopiowania detektorów zdarzeń dołączonych do tej instancji. (Jeśli utworzono nowy węzeł, dla którego potrzebny jest detektor zdarzeń, należy dołączyć detektor po utworzeniu węzła). Jednak przeniesienie instancji klasy EventDispatcher powoduje również przeniesienia dołączonych do niej detektorów zdarzeń
Jeśli detektor zdarzeń jest rejestrowany w węźle w momencie, gdy ten węzeł przetwarza zdarzenie, detektor nie zostanie wywołany w bieżącej fazie, ale może być wywołany w późniejszej fazie przepływu zdarzeń, np. w fazie propagacji.
Jeśli detektor zdarzeń zostanie usunięty z węzła w momencie, gdy ten węzeł przetwarza zdarzenie, zostanie mimo tego wywołany przez bieżące operacje. Raz usunięty detektor zdarzeń nie jest nigdy ponownie wywoływany (chyba że zostanie ponownie zarejestrowany na potrzeby dalszego etapu wykonania programu).
Parametry
type:String — Typ zdarzenia.
| |
listener:Function — Funkcja detektora, który przetwarza zdarzenie. Funkcja musi zaakceptować obiekt Event jako swój jedyny parametr i nie może zwracać żadnych wyników, jak ilustruje to następujący przykład:
| |
useCapture:Boolean (default = false ) — Określa, czy detektor działa w fazie przechwytywania, czy w fazach miejsca docelowego i propagacji. Jeżeli parametr useCapture jest ustawiony na true , wówczas detektor przetwarza zdarzenie tylko w trakcie fazy przechwytywania, a nie w trakcie fazy miejsca docelowego i propagacji. Jeżeli parametr useCapture ma wartość false , wówczas detektor przetwarza zdarzenie tylko w trakcie fazy miejsca docelowego i propagacji. W celu wykrywania zdarzenia we wszystkich trzech fazach należy wywołać metodę addEventListener dwukrotnie, raz przy właściwości useCapture ustawionej na wartość true , a potem ponownie przy właściwości useCapture ustawionej na wartość false .
| |
priority:int (default = 0 ) — Poziom priorytetu detektora zdarzeń. Priorytet ma postać 32-bitowej liczby całkowitej. Im wyższa jest liczba, tym wyższy priorytet. Wszystkie detektory z priorytetem n są przetwarzane przed detektorami z priorytetem n-1. Jeżeli dwa lub większa liczba detektorów ma ten sam priorytet, będą one przetwarzane w kolejności, w jakiej zostały dodane. Priorytet domyślny to 0.
| |
useWeakReference:Boolean (default = false ) — Określa, czy odwołanie do detektora jest mocne, czy słabe. Odwołanie mocne (domyślnie) zapobiega usunięciu detektora przy okazji porządkowania pamięci. Odwołanie słabe temu nie zapobiega. Funkcje składowe na poziomie klasy nie podlegają porządkowaniu pamięci, zatem można ustawić właściwość |
dispatchEvent | () | metoda |
public function dispatchEvent(event:Event):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Wywołuje zdarzenie, tj. kieruje je do przepływu zdarzeń. Miejscem docelowym zdarzenia jest obiekt EventDispatcher, względem którego wywołano metodę dispatchEvent()
.
Parametry
event:Event — Obiekt Event, który jest wywoływany, tj. kierowany do przepływu zdarzeń.
|
Boolean — Wartość true , chyba że dla zdarzenia wywołano metodę preventDefault() , co powoduje zwrócenie wartości false .
|
hasEventListener | () | metoda |
public function hasEventListener(type:String):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Sprawdza, czy obiekt EventDispatcher zawiera jakiekolwiek detektory zarejestrowane dla konkretnego typu zdarzeń. Umożliwia to określenie, w którym miejscu hierarchii przepływu zdarzeń w obiekcie EventDispatcher zmodyfikowana jest obsługa zdarzeń danego typu. Aby sprawdzić, czy zdarzenie określonego typu faktycznie wywoła detektor zdarzeń, należy użyć metody IEventDispatcher.willTrigger()
.
Różnica między metodą hasEventListener()
a metodą willTrigger()
polega na tym, że metoda hasEventListener()
sprawdza tylko obiekt, do którego należy, natomiast metoda willTrigger()
sprawdza cały przepływ zdarzenia określonego parametrem type
.
Parametry
type:String — Typ zdarzenia.
|
Boolean — Wartość true , jeśli detektor określonego typu jest zarejestrowany, wartość false w przeciwnym wypadku.
|
Powiązane elementy interfejsu API
removeEventListener | () | metoda |
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Usuwa detektor z obiektu EventDispatcher. Jeśli w obiekcie EventDispatcher nie ma zarejestrowanego zgodnego detektora zdarzeń, wywołanie tej metody nie odnosi żadnego skutku.
Parametry
type:String — Typ zdarzenia.
| |
listener:Function — Obiekt detektora przeznaczony do usunięcia.
| |
useCapture:Boolean (default = false ) — Określa, czy detektor był zarejestrowany dla fazy przechwytywania, czy dla faz miejsca docelowego i propagacji. Jeżeli detektor był zarejestrowany zarówno dla fazy przechwytywania, jak i dla fazy miejsca docelowego i propagacji, konieczne są dwa wywołania metody removeEventListener() : jedno wywołanie z parametrem useCapture ustawionym na true , a następne wywołanie z parametrem useCapture ustawionym na false .
|
willTrigger | () | metoda |
public function willTrigger(type:String):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Sprawdza, czy detektor zdarzeń określonego typu jest zarejestrowany w tym obiekcie EventDispatcher lub jego przodkach. Ta metoda zwraca wartość true
, jeśli detektor zdarzeń będzie wywoływany w dowolnej fazie przepływu zdarzeń, gdy zdarzenie określonego typu zostanie wywołane w obiekcie EventDispatcher lub dowolnym z jego przodków.
Różnica między metodą hasEventListener()
a metodą willTrigger()
polega na tym, że metoda hasEventListener()
sprawdza tylko obiekt, do którego należy, natomiast metoda willTrigger()
sprawdza cały przepływ zdarzenia określonego parametrem type
.
Parametry
type:String — Typ zdarzenia.
|
Boolean — Wartość true , jeśli detektor określonego typu będzie wywoływany, wartość false w przeciwnym wypadku.
|
decorDispatcher
) klasy DecoratedDispatcher po czym zmienna decorDispatcher
używana jest do wywołania metody addEventListener()
z niestandardowym zdarzeniem doSomething
, które jest następnie obsługiwane przez metodę didSomething()
. Metoda ta drukuje wiersz tekstu przy użyciu funkcji trace()
.
package { import flash.events.Event; import flash.display.Sprite; public class IEventDispatcherExample extends Sprite { public function IEventDispatcherExample() { var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher(); decorDispatcher.addEventListener("doSomething", didSomething); decorDispatcher.dispatchEvent(new Event("doSomething")); } public function didSomething(evt:Event):void { trace(">> didSomething"); } } } import flash.events.IEventDispatcher; import flash.events.EventDispatcher; import flash.events.Event; class DecoratedDispatcher implements IEventDispatcher { private var dispatcher:EventDispatcher; public function DecoratedDispatcher() { dispatcher = new EventDispatcher(this); } public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{ dispatcher.addEventListener(type, listener, useCapture, priority); } public function dispatchEvent(evt:Event):Boolean{ return dispatcher.dispatchEvent(evt); } public function hasEventListener(type:String):Boolean{ return dispatcher.hasEventListener(type); } public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{ dispatcher.removeEventListener(type, listener, useCapture); } public function willTrigger(type:String):Boolean { return dispatcher.willTrigger(type); } }
Tue Jun 12 2018, 12:06 PM Z