comp

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.
endUpdate();
nieaktualizowany. Metoda endUpdate,
która jest wywoływana w czasie
tworzenia komponentu, wykonuje
metody initialize (jeśli dany
komponent nie jest inicjalizowany)
i updated.
updated
Implementacja pusta.
comp.updated();
get_isUpdating
Zwraca wartość składowej _updating.
comp.get_isUpdating();
initialize
Oznacza dany komponent jako
comp.initialize();
inicjalizowany.
get_initialized
Zwraca wartość składowej _initialized. comp.get_initialized();
Typ Sys.Component
147
TABELA 3.4. Metody klasy Sys.Component — ciąg dalszy Nazwa metody
Opis
Składnia
dispose
Wykonuje metody obsługujące
comp.dispose();
zdarzenie disposing. Usuwa
właściwość _events z danego
komponentu i anuluje jego rejestrację
w obiekcie Sys.Application.
get_events
Zwraca wartość składowej _events.
comp.get_events();
get_id
Zwraca wartość składowej _id.
comp.get_id();
set_id
Ustawia wartość składowej _id. Raz
comp.set_id( id);
ustawionego identyfikatora nie można
zmieniać (za pośrednictwem tej
metody); identyfikator nie może
być zmieniany także po rejestracji
komponentu w obiekcie
Sys.Application.
add_disposing
Dodaje metodę obsługującą
comp.add_disposing
zdarzenie disposing.
( handler);
remove_disposing
Usuwa metodę obsługującą
comp.remove_disposing
zdarzenie disposing.
( handler);
add_propertyChan
Dodaje metodę obsługującą
comp.add_propertyChanged
ged
zdarzenie propertyChanged.
( handler);
remove_propertyC
Usuwa metodę obsługującą
comp.remove_property
hanged
zdarzenie propertyChanged.
Ćhanged
( handler);
raisePropertyCha
Wykonuje zarejestrowane
comp.raisePropertyChanged
nged
metody obsługujące zdarzenie
( propertyName);
propertyChanged, przekazując na
ich wejściu (w formie argumentów
zdarzenia) nazwę zmodyfikowanej
właściwości.
WSKAZÓWKA Metody beginUpdate, endUpdate oraz initialize Metody beginUpdate, endUpdate oraz initialize są wykonywane automatycznie w ramach procesu tworzenia komponentu. Wymienione metody z reguły nie są wy-woływane z poziomu kodu zdefiniowanego przez użytkownika, ale można je przykryć, aby umieścić w nich jakąś niestandardową funkcjonalność.
148
Rozdział 3. Komponenty
Definiowanie nowych komponentów
Klasa Sys.Component jest niezwykle przydatna, jednak jej celem nie jest bezpośrednie tworzenie egzemplarzy tego typu. Przeciwnie, twórcy klasy Sys.Component chcieli opra-cować typ, który będzie wykorzystywany w roli klasy bazowej dla komponentów definio-wanych przez użytkowników.
Nowy typ komponentu możemy zdefiniować, stosując model prototypowy omówiony w rozdziale 2. i rejestrując nasz komponent jako typ dziedziczący po klasie bazowej Sys.Component.
Komponent ErrorHandler
Aby zademonstrować technikę definiowania nowych komponentów, utworzymy nowy, własny komponent obsługi błędów. Komponent ErrorHandler będzie odpowiadał za pu-blikowanie obsługiwanych i nieobsługiwanych błędów z wykorzystaniem specjalnej usługi danych o błędach.
Szkielet
Na początek utworzymy szkielet naszego nowego komponentu (patrz listing 3.1).
LISTING 3.1. Definiowanie komponentu ErrorHandler
///
ErrorHandler = function() {
ErrorHandler.initializeBase(this);
};
ErrorHandler.prototype = {
initialize: function() {
ErrorHandler.callBaseMethod(this, 'initialize');
},
dispose: function() {
ErrorHandler.callBaseMethod(this, 'dispose');
}
}
ErrorHandler.registerClass('ErrorHandler', Sys.Component); Oprócz wywołania metody initializeBase w konstruktorze naszego typu i rejestracji tej klasy jako typu dziedziczącego po klasie Sys.Component zdecydowaliśmy się na przy-krycie metod initialize i dispose klasy bazowej Sys.Component. Umieściliśmy te przykryte metody w szkielecie naszego komponentu, ponieważ właśnie przykrywanie initialize i dispose jest zwykle jednym z pierwszych kroków procesu tworzenia komponentu (podobną kolejność sugerujemy także Tobie).
Typ Sys.Component
149
Inicjalizacja i niszczenie komponentu
Naszą szkieletową definicję należy jeszcze uzupełnić o implementacje metod initialize i dispose.
W metodzie initialize konstruujemy nasz komponent. Proces konstruowania komponentu obejmuje takie kroki jak dodanie metod obsługujących zdarzenia do elementów modelu DOM, dołączenie nowego elementu DOM do drzewa i wszystkie inne operacje wymagane przez konkretny typ komponentów.
W metodzie dispose powinniśmy umieścić kod odpowiedzialny za zwalnianie naszego komponentu. Zwalnianie komponentu może obejmować odłączenie zdarzeń od elementu modelu DOM, zniszczenie ewentualnych utworzonych elementów DOM lub zwolnienie wszelkich innych zasobów utworzonych przez nasz komponent.
WSKAZÓWKA Metodę dispose można wywołać więcej niż raz
Warto tak implementować metodę dispose, aby można ją było wywoływać więcej niż raz bez ryzyka powodowania błędów czasu wykonywania. W przypadku dość złożonych aplikacji nietrudno o sytuację, w której zwalniany obiekt menedżera wywoła metodę dispose wszystkich swoich komponentów potomnych. Okazuje się jednak, że każdy z tych obiektów potomnych jest zarejestrowany także w obiekcie Sys.Application jako obiekt, który może być zwalniany (który implementuje interfejs Sys.IDisposable).
Zwalniany obiekt Sys.Application automatycznie wykonuje metodę dispose każ-
dego z tak zarejestrowanych obiektów — oznacza to, że metody dispose tych obiektów są wykonywane (co najmniej) dwukrotnie. Jeśli nie zachowamy należytej ostroż-
ności, próby wielokrotnego wykonania metody dispose będą się kończyły błędami czasu wykonywania. Można jednak uniknąć tych problemów, stosując proste mechanizmy weryfikacji w formie wyrażeń warunkowych.
Na potrzeby naszego nowego komponentu ErrorHandler należy dodać metodę obsługującą zdarzenie error obiektu window przy okazji inicjalizacji tego komponentu i usunąć tę metodę przy okazji jego zwalniania. Proponowaną implementację tego mechanizmu przedstawiono na listingu 3.2.
LISTING 3.2. Dodawanie metody obsługującej zdarzenie error obiektu okna
///
ErrorHandler = function () {
ErrorHandler.initializeBase(this);
};
ErrorHandler.prototype = {
initialize: function () {
Wątki
Powered by wordpress | Theme: simpletex | © Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.