Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.
Warto zwrócić szczególną uwagę na sposób przekazania wywołania $get("txtBox1") za pośrednictwem parametru element metody $create. W czasie tworzenia nowego egzemplarza klasy NumberOnlyTextBox metoda $create sprawdza, czy typ NumberOnlyTextBox dziedziczy po typie Sys.UI.Control lub Sys.UI.Behavior. Jeśli tak (a tak jest w tym przypadku), metoda $create wykorzystuje parametr element w roli argumentu wywoływanego konstruktora (podobne rozwiązanie zastosowaliśmy na listingu 3.17 przed użyciem metody $create do utworzenia naszej nowej kontrolki).
UWAGA Ustawianie identyfikatora kontrolki
Inaczej niż w przypadku komponentów i zachowań, bezpośrednie ustawianie identyfikatorów kontrolek nie jest możliwe. Identyfikator kontrolki zawsze jest tożsamy z identyfikatorem powiązanego z nią elementu modelu DOM.
Podsumowanie wiedzy o kontrolkach
Kontrolki w niewielkim stopniu różnią się od komponentów (klasa komponentów jest typem bazowym klas kontrolek). Najważniejsza różnica polega na konieczności związania każdej kontrolki z pojedynczym elementem modelu DOM (w przypadku komponentów istnienie tego rodzaju związków nie jest konieczne).
Zachowania
Zachowanie to kolejny specjalny rodzaj komponentu zwiÄ…zany z elementami modelu DOM.
Podobnie jak kontrolki, zachowania muszą być skojarzone z elementami DOM. Okazuje się jednak, że w inaczej niż w przypadku kontrolek, pojedynczy element DOM może być związany z więcej niż jednym zachowaniem.
176
Rozdział 3. Komponenty
W wymiarze praktycznym zachowania definiują oczekiwany sposób zachowywania się elementu DOM. Możemy na przykład zdecydować, że dany element DOM powinien być zwijany do pojedynczego wiersza, pływać na stronie bądź wypełniać całą dostępną przestrzeń na ekranie. Wszystkie te zachowania możemy dołączyć do elementu modelu DOM
właśnie za pomocą egzemplarzy typów zachowań.
Aby ułatwić nam definiowanie nowych typów zachowań i korzystanie z egzemplarzy tych typów, typ bazowy Sys.Behavior definiuje kilka dodatkowych metod, uzupełniających zbiór metod oferowanych przez jego typ bazowy Sys.Component. Metody klasy Sys.Behavior szczegółowo omówiono w tabeli 3.8.
TABELA 3.8. Metody klasy Sys.UI.Behavior
Nazwa metody
Opis
Składnia
get_element
Zwraca element modelu dom
return behavior.
związany z danym zachowaniem. ´get_element();
get_name
Zwraca nazwÄ™ danego zachowania.
return behavior.
Jeśli wprost określono nazwę
´get_name();
danego zachowania, zwracana jest
właśnie ta nazwa. W przeciwnym
razie metoda get_name zwraca
skróconą nazwę typu tego
zachowania.
set_name
Ustawia nazwÄ™ danego
behavior.set_name
zachowania. Nazwa ustawiana
´("HiddenElm");
w ten sposób musi być unikatowa.
Nazw zachowań nie można
ustawiać po ich inicjalizacji.
Nazwa zachowania nie może się
rozpoczynać od znaku białego,
nie może się kończyć znakiem
białym, nie może też być
łańcuchem pustym.
initialize
Wywołuje metodę initialize
behavior.initialize();
klasy bazowej. Kojarzy dane
zachowanie z odpowiednim
elementem DOM przez dodanie
do tego elementu właściwości
expando z nazwÄ… danego
zachowania.
Zachowania
177
TABELA 3.8. Metody klasy Sys.UI.Behavior — ciąg dalszy Nazwa metody
Opis
Składnia
dispose
Przykrywa metodÄ™ dispose klasy
Sys. behavior.dispose();
Component. Wywołuje metodę
dispose klasy bazowej, usuwa
z elementu DOM właściwość
expando reprezentujÄ…cÄ… nazwÄ™
danego zachowania i usuwa
referencjÄ™ do tego elementu
z samego zachowania.
get_id
Zwraca wartość właściwości id
return behavior.
danego komponentu (jeśli tę
´get_id();
wartość ustawiono). Jeśli wartość
tej właściwości nie została
ustawiona, metoda get_id zwraca
identyfikator elementu DOM
powiÄ…zanego z tym zachowaniem
i nazwÄ™ samego zachowania.
Sys.UI.Behavior.
Zwraca wszystkie zachowania
return Sys.UI.Behavior.
´getBehaviorsByType dołączone do elementu DOM
´getBehaviorsByType
określonego typu.
´( element, typeName)
Sys.UI.Behavior.
Zwraca zachowanie dołączone
return Sys.UI.Behavior.
´getBehaviorByName
do wskazanego elementu modelu ´getBehaviorByName
DOM (jeśli takie zachowania
´( element, behaviorName)
istniejÄ…).
Sys.UI.Behavior.
Zwraca kopię zachowań
return Sys.UI.Behavior.
´getBehaviors
dołączonych do wskazanego
´getBehaviors( element);
elementu DOM. Jeśli określony
element modelu DOM nie jest
związany z żadnymi zachowaniami,
metoda getBehaviors zwraca
tablicÄ™ pustÄ….
Definiowanie zachowania
Podobnie jak podczas definiowania nowych komponentów i nowych kontrolek, definiując nowe zachowania posługujemy się modelem prototypowym omówionym w rozdziale 2.
Zamiast tworzyć od podstaw nowy przykład, odpowiednio zmodyfikujemy przedstawiony w poprzednim podrozdziale kod definiujący kontrolkę NumberOnlyTextBox. Na listingu 3.19
przedstawiono kod niezbędny do zdefiniowania zachowania NumberOnlyTextBox.
178
Rozdział 3. Komponenty
LISTING 3.19. Definiowanie typu zachowania
///
NumberOnlyTextBox = function(element) {
NumberOnlyTextBox.initializeBase(this, [element]);
this._keyDownDelegate = null;
};
NumberOnlyTextBox.prototype = {
initialize: function() {
NumberOnlyTextBox.callBaseMethod(this,'initialize');
this._keyDownDelegate =
Function.createDelegate(this, this._keyDownHandler);
$addHandler(this.get_element(), "keydown", this._keyDownDelegate);
},
dispose: function() {
$removeHandler
(this.get_element(), "keydown", this._keyDownDelegate); this._keyDownDelegate = null;
NumberOnlyTextBox.callBaseMethod(this, 'dispose');
},
_keyDownHandler: function(e) {
return ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode == 8));
}
};
NumberOnlyTextBox.registerClass("NumberOnlyTextBox", Sys.UI.Behavior); Jak widać, kod definiujący nasze zachowanie NumberOnlyTextBox niemal niczym nie różni się od kodu definiującego wcześniej tak samo nazwaną kontrolkę. Różnice sprowa-dzają się do rezygnacji z typu bazowego Sys.UI.Control na rzecz typu Sys.UI.Behavior.