В Flex есть несколько вещей, которые вы можете переопределить или прослушать, которые действительно важны.
FlexEvent.CREATION_COMPLETE
- установите для этого eventListener
(я обычно делаю это в конструкторе, но вы можете сделать это в MXML как атрибут creationComplete
), и он действует как ваш конструктор. Используйте методы получения и установки для передачи ссылок на ваши зависимости в качестве атрибутов MXML и сохранения их локально, а затем в этом обработчике вы примените их.
override protected function createChildren
- вызывается, когда необходимо добавить элементы списка отображения в компонент. Вы не должны делать это во время обработчиков constructor или creationComplete. Всегда соблазнительно addChild
вне этой функции, но Adobe рекомендует только делать это непосредственно в этой функции.
override protected function updateDisplayList
- это то место, где должна происходить ваша логика рисования (если она есть) или позиционирование / альфа / вращение / и т. Д. Это будет вызвано, если свойство CSS изменяется, дочерний объект изменяет размер или положение или что-то еще, что, по мнению платформы Flex, может привести к необходимости перерисовки экрана. Вы можете заставить updateDisplayList
позвонить по телефону invalidateDisplayList
override protected function commitProperties
- вызывается при изменении dataProvider для класса. Любые временные данные внутри компонента означают, что вы хотите обновить внутренние структуры данных, это следует назвать. Вы можете заставить это вызываться используя invalidateProperties
.
FlexEvent.ADDED_TO_STAGE
- Если вам нужно знать, когда компонент фактически добавлен на сцену, вы можете прослушать это. На практике я не помню, чтобы когда-либо на самом деле использовал его ...
Всегда не забывайте вызывать эквиваленты super
- если вы забудете это сделать, компонент вообще не появится вообще (это случается со мной как минимум 4 или 5 раз в проекте). Также имейте в виду, что если вы сначала invalidateProperties
, а затем commitProperties
, а затем invalidateDisplayList
, а затем updateDisplayList
, вы можете увидеть некоторую дрожь ... то есть, invalidateDisplayList
, как только вы узнаете, что хотите перерисовать чтобы избежать задержки.
Также не стоит слишком инвестировать в Flex 3, так как Flex 4 не за горами и он немного другой. У меня есть ощущение, что большая часть этого больше не будет применяться в новой структуре компонентов (имена Spark).
edit типичная заглушка класса:
package
{
import mx.containers.Canvas;
import mx.events.FlexEvent;
public class TestComponent extends Canvas
{
public function TestComponent()
{
super();
addEventListener(FlexEvent.CREATION_COMPLETE, init);
}
// acts as constructor
private function init(event:FlexEvent):void
{
// might as well be clean
removeEventListener(FlexEvent.CREATION_COMPLETE, init);
// do init stuff here
}
override protected function createChildren():void
{
super.createChildren();
// do any addChilds here that are necessary
}
override protected function commitProperties():void
{
super.commitProperties();
// update internal state when data changes
}
override protected function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
// do any drawing, positioning, rotation etc.
}
}
}