我正在寻找正确的事件监听方式,以确保我的组件参数可用,以便初始化我的组件。
我在网上看到的大多数示例都使用附加到loaderInfo的Event.INIT。
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);
}
}
}