Я пытаюсь найти правильное событие для прослушивания, которое гарантирует, что параметры моего компонента доступны для использования, чтобы я мог инициализировать свой компонент.
Большинство примеров, которые я видел в Интернете, используют Event.INIT, прикрепленный к loaderInfo.
loaderInfo.addEventListener(Event.INIT, initHandler);
По моему опыту, это событие срабатывает только в первом кадре фильма.
Другие люди используют Event.COMPLETE, который запускается после Event.INIT, чтобы гарантировать, что компонент и параметры доступны для использования. Опять же, событие, кажется, срабатывает только в первом кадре фильма. Это имеет смысл, поскольку он присоединен к свойству loaderInfo компонента.
Ниже приведен класс для очень простого компонента, который показывает именно то, о чем я говорю. Прикрепите этот класс к мувиклипу в диалоговом окне «Свойства» и в диалоговом окне «Определение компонента» (я не буду рассказывать, как создать компонент, поскольку вы, вероятно, знаете), затем перетащите полученный компонент на сцену и установите «Test var». параметр "TEST_VAR_CHANGED".
Когда вы визуализируете фильм с компонентом в первом кадре, вы увидите:
constructor null
initHandler TEST_VAR_CHANGED
completeHandler TEST_VAR_CHANGED
Когда вы визуализируете фильм с компонентом во втором кадре, вы увидите только:
constructor null
Итак ... какое событие я слушаю, чтобы гарантировать доступность параметров компонента перед тем, как запустить обработчик инициализации?
Класс компонентов:
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class ComponentEventTest extends MovieClip
{
[Inspectable(name="Test var", type="String")]
public var testVar:String;
function ComponentEventTest()
{
trace('constructor', testVar);
loaderInfo.addEventListener(Event.INIT, initHandler);
loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
}
private function initHandler(evt:Event):void
{
loaderInfo.removeEventListener(Event.INIT, initHandler);
trace('initHandler', testVar);
}
private function completeHandler(evt:Event):void
{
loaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
trace('completeHandler', testVar);
}
}
}