Ustawienie szerokości i wysokości po utworzeniu komponentu

January 17th, 2010 by damian Leave a reply »

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.

Advertisement

1 comment

  1. Hellix says:

    Dobra robota! Bardzo cenna informacja. Dzięki ;)

Leave a Reply

Flexmaniaks on Facebook