MooTools 1.2 - klasa Options
23 lipca, 2008
Przez kolejne trzy części kursu skupimy się na klasach (daruję sobie już cudzysłowy ;) ), które znacznie rozszerzają nasze możliwości użycia obiektu Class. Na początek wyjaśni się kwestia składni wielu elementów MooTools, które poznamy później - po części poświęconej programowaniu obiektowemu.
Składnia
W MooTools przy użyciu różnego typu klas takich jak klasy rodziny Fx czy Request bazują na takiej składni:
var obiektKlasy = new Klasa(parametr1, parametr2, {opcjeKlasy});
poszczególne parametry są z reguły obowiązkowe (poza opcjami). Jak zaimplementować tego typu składnię we własnej klasie ?
Przede wszystkim musimy dodać klasę Options do właściwości Implements:
var przykladowaKlasa = new Class({ Implements: Options, //... dalszy kod klasy });
Gdy już to zrobimy mamy możliwość zastosowania obiektu options, który zawiera spis opcji klasy wraz z ich domyślnymi wartościami:
var przykladowaKlasa = new Class({ Implements: Options, options: { opcja1: "wartośćDomyślna", opcja2: true, //... opcjaN: { // obiekt z opcjami } } });
I od razu mała uwaga - najlepiej nie stosować żadnych opcji zaczynających się od znaków "on" i następujących po nich dużej litery (odpadają zatem onClick, onLoad, onRetry, onSth i wszystkie inne zapisy w takiej postaci), gdyż jeżeli dodamy klasę Events to taka opcja automatycznie stanie się zdarzeniem danej klasy.
Mamy już listę opcji i ich domyślnych wartości - pora ich użyć. W tym celu jako pierwszy argument metody initialize przekazujemy obiekt options, a w samym kodzie tej metody wywołujemy metodę setOptions z obiektem options podanym jako argument:
var przykladowaKlasa = new Class({ Implements: Options, options: { opcja1: "wartośćDomyślna", opcja2: true, //... opcjaN: { // obiekt z opcjami } }, initialize: function(options){ this.setOptions(options); // ... } });
Teraz gdy utworzymy obiekt na podstawie takiej klasy:
var obiektTestowy = new przykladowaKlasa({ opcja1: "test", opcja2: false });
Możemy uzyskać bezpośredni dostęp do wartości tych opcji poprzez zapis:
obiektTestowy.options.opcja;
Oczywiście w kodzie samej klasy do opcji odwołujemy się poprzez zapis:
this.options.opcja;
Po co to nam w ogóle ?
Z pewnością komuś klasa Options może się wydać nieprzydatna, ponieważ wszystkie opcje można podać jako argumenty konstruktora klasy. W takim rozumowaniu jest trochę racji - dlatego jeżeli ktoś ma zamiar tworzyć klasy typu:
var przykladowaKlasa = new Class({ Implements: Options, options: { opcja1: "wartośćDomyślna", opcja2: true }, initialize: function(options){ this.setOptions(options); // ... } });
To niech to sobie od razu daruje - zamiast tego niech stworzy klasę postaci:
var przykladowaKlasa = new Class({ initialize: function(opcja1, opcja2){ if(!$defined(opcja1)) opcja1 = "wartośćDomyślna"; if(!$defined(opcja1)) opcja2 = true; // ... } });
Klasa Options jest niezwykle przydatna w sytuacji gdy mamy sporo opcji i zależy nam na tym by sama klasa była łatwa w użytku - dzięki Options nie musimy się martwić o kolejność argumentów, ich wartości domyślne, a dodatkowo potencjalny użytkownik klasy otrzymuje klarowny podział na wymagane argumenty konstruktora i jego opcjonalne argumenty (jak zresztą sama nazwa klasy na to wskazuje).
Tak więc klasa Options powinna stać się najlepszą przyjaciółką osób, które lubią pisać klasy z ogromną ilością opcji konfiguracyjnych ;)
Podsumowanie
Wiemy już jak dodawać opcje do tworzonych klas z użyciem MooTools 1.2 . W następnej części skupimy się na zdarzeniach klas czyli klasie Events.
Komentarze do wpisu "MooTools 1.2 - klasa Options":
1.
Bigismall napisał(a):
24 lipca 2008, 12:18:32
Piszesz :
„W takim rozumowaniu jest trochę racji – dlatego jeżeli ktoś ma zamiar tworzyć klasy typu:”
....
„To niech to sobie od razu daruje – zamiast tego niech stworzy klasę postaci:”
Chodzi ci o to że nie ma sensu używać Options przy małej liczbie pól danej klasy ?
2.
Dziudek napisał(a):
24 lipca 2008, 12:24:44
@Bigismall – no używanie Options dla klas, które na starcie potrzebują 4-5 argumentów jest bez sensu chyba, że naprawdę tylko dwa z nich są wymagane a podawanie reszty działa na zasadzie – czasami piąty, a czwarty i trzeci nie – wtedy można użyć Options dla wygody by nie podawać na siłę 2 argumentów dodatkowo, choć i tak sensowność użycia Options jest tu dla mnie sporna ;) W każdym razie warto pamiętać by nie stosować wszystkiego co popadnie, a naprawdę przemyśleć podczas projektowania klasy co jest rzeczywiście potrzebne, a co nie ;)
Dodaj komentarz: