Mootools 1.1 - Group.js

19 sierpnia, 2007

Od pliku group.js zacznę opis pluginów frameworka mootools. W pliku tym znajdziemy jedną klasę - Group, z jedną tylko metodą - addEvent. Jakie jest przeznaczenie tej klasy ? Służy ona do wywoływania funkcji w momencie, gdy wszystkie podane jako argumenty obiekty klas wywołają określone zdarzenie.

Jeżeli na przykład ładujemy kilka obrazków korzystając z klasy Asset to możemy sprawić, że po załadowaniu wszystkich grafik zostanie wywołana określona funkcja. Oczywiście to tylko przykład, bo o wiele lepiej w tym wypadku skorzystać z metody images klasy Asset. O wiele lepiej klasa Group sprawdzi się, że tak to ujmę "rozproszonych" sytuacjach, czyli nie takich gdzie kilka operacji wykonuje się jedna po drugiej, ale tam gdzie pewne zdarzenia występują w różnych momentach działania skryptu, a muszą po wykonaniu całości dać znać, że wszystkie zostały wykonane.

Składnia tworzenia obiektu klasy Group wygląda następująco:

var grupa = new Group(obiekt_1, obiekt_2, ... , obiekt_n);

Jak widzimy jako argumenty klasy Group podajemy dowolnie długi ciąg obiektów.

Gdy mamy już grupę możemy dodać do niej zdarzenie, którego wykonanie we wszystkich instancjach spowoduje wywołanie funkcji:

grupa.addEvent("onzdarzenie",function(){
   // kod funkcji
});

Jak widzimy w przeciwieństwie do standardowej metody addEvent klasy Element w wypadku klasy Group do nazwy zdarzenia dodajemy też prefiks "on".

Klasa Group jak widać nie jest zbyt skomplikowana w użyciu, więc pora na jakiś przykład użycia. Proponuję rozbudowę ostatniego przykładu z poprzedniej części kursu. Będzie ona polegała na tym, że w momencie usunięcia wszystkich przenośnych divów, będzie usuwana cała struktura służąca do drag'n'drop (biały i czarny element), a zamiast nich pojawi się stosowny komunikat.

Na początku musimy pamiętać o tym, że klasa Group jako argumenty nie przyjmuje tablic - zatem musimy rozdzielić wszystkie elementy tablicy $$(".przenosny") - zrobię to poprzez stworzenie nowej tablicy, choć oczywiście można się odwoływać bezpośrednio poprzez zapis $$(".przenosny")[indeks], ale spowodowałoby to wykonanie dziewięć razy selekcji elementów.

Tworzymy zmienną elementy:

var elementy = [];

Następnie zmieniamy linijkę:

$$(".przenosny").each(function(element){

na zapis:

$$(".przenosny").each(function(element,index){
   elementy[index] = element;

Dzięki temu dodajemy automatycznie zmienną iteracyjną i dodajemy elementy do nowej tablicy.

Na koniec już poza metodą each tworzymy obiekt klasy Group i jako argumenty wypisujemy po kolei wszystkie pozycje tablicy elementy:

var grupa = new Group(elementy[0], elementy[1], elementy[2], elementy[3], elementy[4], elementy[5], elementy[6], elementy[7], elementy[8]);

oraz dodajemy zdarzenie do nowo utworzonego obiektu:

grupa.addEvent("emptydrop",function(){
   $("dobro").remove();
   $("zuo").remove();
   $("content").setHTML("Usunąłeś/aś wszystkie divy i nie ma już co przenosić...");
});

Warto zapamiętać, że zdarzenie emptydrop nie posiada przedrostka "on" (przy innych zdarzeniach musimy ów przedrostek zapisać). A kod funkcji powinien być już chyba dla każdego zrozumiały :)

No to teraz usuńcie wszystkie elementy z obszaru dobra i zła :D

PRZYKŁAD

I to by było właściwie wszystko o tym prostym pluginie. Może jeszcze dodam, że możemy za jego pomocą monitorować kilka zdarzeń dla danej grupy - w tym wypadku oczywiście wywołujemy metodę addEvent odpowiednią ilość razy.

Kolejnym omawianym pluginem będzie SmoothScroll.js

Komentarze do wpisu "Mootools 1.1 - Group.js":

1. kubarek napisał(a):
19 sierpnia 2007, 17:05:44

a co zrobić w przypadku, gdy nie znamy ilości elementów w tablicy ‘elementy’ ?

2. Dziudek napisał(a):
19 sierpnia 2007, 17:10:25

kubarek – wtedy trzeba troszkę pokombinować na podstawie analizy kodu pliku group.js – znajdziesz tam pole this.instances.

W wypadku mojego przykładu kod trzeba zmienić na :

var grupa = new Group();grupa.instances = $$(".przenosny");

;)

Dodaj komentarz:

Textile Lite włączony ( szczegółowy opis znaczników ):
*strong* | # lista numerowana | * lista wypunktowana | _em_ | __italic__ | "link":http:// | bq. cytat.