Loader.loadBytes和getDefinitionByName

时间:2010-02-06 10:58:45

标签: flex

我目前正在开发一个项目,它将加载一个swc,检查它并允许用户查看里面的类。

我使用Loader.loadBytes加载了library.swf(这些字节来自我使用的解压缩库)。我使用getDefinitionByName创建了一个类的实例。

只要在下一帧上调用getDefinitionByName,这一切都可以正常工作。如果我立即调用它,我会收到引用错误。为了解决这个问题,我想出了一个相当狡猾的解决方案:

private function processLibraries( event : Event ) : void
{
    _zipFiles.forEach( processSwfs );

    DisplayObject( FlexGlobals.topLevelApplication ).addEventListener( Event.ENTER_FRAME, enterFrame );
}

private function enterFrame( event : Event ) : void
{
    DisplayObject( FlexGlobals.topLevelApplication ).removeEventListener( Event.ENTER_FRAME, enterFrame );

    _classCollection = new ArrayCollection();

    _zipFiles.forEach( processCatalogs );

    complete( _classCollection );
}

我真的不喜欢在顶级应用程序中使用输入框架事件。我也不想设置计时器。那就像讨厌一样。

Loader.loadBytes不会触发一个完整的事件,因此我不知道在将字节完全加载到ApplicationDomain时我在哪里监听事件。

这周必须有一个更简洁的方法吗?

由于

1 个答案:

答案 0 :(得分:4)

Loader.loadBytes会触发一个完整的事件。请记住将您的监听器添加到Loader.contentLoaderInfo。

但是,如果要加载SWF文件,该文件是使用版本4之前的FlexSDK编译的SWC文件的一部分,则不会获得Event.INIT方法,因为只有在文档类可用时才会触发它。自SDK版本4以来,编译器会注入这样的类。