Jednym z częstych problemów z komponentami pisanymi w Action Scripcie jest ustawienie ich szerokości i wysokości tak, żeby były one widoczne od razu po utworzeniu komponentu.
Poniżej przedstawie dwa rozwiązania tego problemu.
1. Użycie wydarzenia creationComplete
Polega na ustawieniu w kontruktorze Listenera, żeby nasłuchiwał na zdarzenie creationComplete. W metodzie obsługującej zdarzenie zmieniamy odpowiednio width i height komponentu.
public class FirstBox extends Box {
public function FirstBox() {
super();
this.addEventListener(FlexEvent.CREATION_COMPLETE, creationComplete);
}
protected function creationComplete(ev:FlexEvent):void {
this.width = 150;
this.height = 50;
}
}
2. Nadpisanie metody measure
Drugie rozwiązanie polega na nadpisaniu metody measure i ustawieniu w niej wartosci pol measuredWidth i measuredHeight, które odpowiadają szerokości i wysokości.
public class SecondBox extends Box {
public function SecondBox() {
super();
}
protected override function measure():void {
super.measure();
measuredWidth = 150;
measuredHeight = 50;
}
}
Poniżej przedstawiam przykład, który prezentuje problem i rozwiązania.
O ile oba rozwiązania dają ten sam efekt, to jednak rozwiązanie drugie jest szybsze, prostsze, bardziej logiczne i w ogóle lepsze :) Dlaczego?
Logicznie rzecz biorąc, wymiary komponentu nie powinny być uzależnione od żadnego zewnętrznego czynnika (zgodnie z obiektowym podejściem do programowania). W pierwszym przypadku ta zasada nie jest spełniona, gdyż komponent czeka na zdarzenie creationComplete, które jest sygnalizowane przez aplikację.
W drugim zadaniu nie wykorzystujemy żadnych mechanizmów (=zdarzeń), tylko nadpisujemy jedną metodę. Oczywiście jest to prostsze rozwiązanie :) Poza tym jest całkowicie uniezależnione od innych komponentów, czy ogólnie aplikacji.
Dobra robota! Bardzo cenna informacja. Dzięki ;)