Obsługa zdarzeń

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"); 
}