|
Każdy składnik rozgłasza zdarzenia w odpowiedzi na interakcje z użytkownikiem. Na przykład, gdy użytkownik kliknie przycisk (składnik Button), składnik ten wywołuje zdarzenie
MouseEvent.CLICK
, a gdy użytkownik wybierze element na liście, składnik List wywołuje zdarzenie Event.
CHANGE
Zdarzenia są także wywoływane po spełnieniu pewnych ważnych warunków wewnętrznych w składniku, na przykład zakończenie ładowania treści w instancji składnika UILoader powoduje wygenerowanie zdarzenia
Event.COMPLETE
. Aby obsługiwać zdarzenie, należy napisać w języku ActionScript kod wykonywany po zajściu tego zdarzenia.
Do zdarzeń składnika zaliczają się zdarzenia wszystkich klas, z których ten składnik dziedziczy. Oznacza to, że wszystkie składniki interfejsu użytkownika w języku ActionScript 3.0 dziedziczą zdarzenia z klasy UIComponent, ponieważ jest to klasa bazowa dla składników interfejsu użytkownika. Aby wyświetlić listę zdarzeń rozgłaszanych przez składnik, należy zapoznać się z sekcją Zdarzenia opisu klasy składnika w
Skorowidzu języka ActionScript 3.0
dla programu Flash Professional
.
Pełny opis mechanizmów obsługi zdarzeń w języku ActionScript 3.0 zawiera podręcznik
Programowanie w języku ActionScript 3.0
.
Informacje o detektorach zdarzeń
Poniżej przedstawiono najważniejsze zasady obsługi zdarzeń związanych ze składnikami w języku ActionScript 3.0:
-
Wszystkie zdarzenia są rozgłaszane przez instancje klas składników. Instancja składnika jest
źródłem zdarzeń
.
-
Kod użytkownika rejestruje
detektor
zdarzenia, wywołując metodę
addEventListener()
w instancji składnika. Na przykład poniższy kod dodaje detektor zdarzenia
MouseEvent.CLICK
do instancji składnika Button o nazwie
aButton
:
aButton.addEventListener(MouseEvent.CLICK, clickHandler);
Drugim parametrem metody
addEventListener()
jest nazwa rejestrowanej funkcji,
clickHandler
; ta funkcja będzie wywoływana po zajściu zdarzenia. Funkcja ta jest także nazywana
funkcją
wywołania zwrotnego
.
-
Dla jednej instancji składnika można zarejestrować wiele detektorów zdarzeń.
aButton.addEventListener(MouseEvent.CLICK, clickHandler1);
aButton.addEventListener(MouseEvent.CLICK, clickHandler2);
-
Jeden detektor zdarzeń można zarejestrować dla wielu instancji składnika.
aButton.addEventListener(MouseEvent.CLICK, clickHandler1);
bButton.addEventListener(MouseEvent.CLICK, clickHandler1);
-
Do funkcji obsługi zdarzeń jest przekazywany obiekt zdarzenia zawierający informacje o typie zdarzenia i instancji, która to zdarzenie rozgłosiła. Więcej informacji zawiera sekcja
Informacje o obiekcie zdarzenia
.
-
Detektor pozostaje aktywny, dopóki aplikacja nie zakończy działania lub dopóki nie zostanie jawnie usunięty przy użyciu metody
removeEventListener()
. Na przykład poniższy wiersz kodu usuwa detektor zdarzenia
MouseEvent.CLICK
z instancji
aButton
:
aButton.removeEventListener(MouseEvent.CLICK, clickHandler);
Informacje o obiekcie zdarzenia
Obiekt zdarzenia dziedziczy z klasy obiektów Event i ma właściwości zawierające informacje o zdarzeniu, które zaszło, między innymi właściwości
target
oraz
type
udostępniające najważniejsze informacje o zdarzeniu:
|
Właściwość
|
Opis
|
|
type
|
Ciąg znaków określający typ zdarzenia.
|
|
target
|
Odwołanie do instancji składnika, która rozgłosiła zdarzenia.
|
Jeśli zdarzenie ma dodatkowe właściwości, są one wymienione w opisie klasy zdarzenia w
Skorowidzu języka ActionScript 3.0
dla programu Flash Professional
.
Obiekt zdarzenia jest generowany automatycznie i przekazywany do funkcji obsługi zdarzenia, gdy zajdzie dane zdarzenie.
Obiektu zdarzenia można używać wewnątrz funkcji, aby uzyskać dostęp do nazwy rozgłoszonego zdarzenia lub nazwy instancji składnika, która rozgłosiła zdarzenia. Znając nazwę instancji, można uzyskać dostęp do pozostałych właściwości składnika. Na przykład w poniższym kodzie użyto właściwości
target
obiektu zdarzenia
evtObj
w celu uzyskania dostępu do właściwości
label
składnika
aButton
i wyświetlenia jej wartości w panelu Wyjście:
import fl.controls.Button;
import flash.events.MouseEvent;
var aButton:Button = new Button();
aButton.label = "Submit";
addChild(aButton);
aButton.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(evtObj:MouseEvent){
trace("The " + evtObj.target.label + " button was clicked");
}
|
|
|