我目前正在开发一个项目,它将加载一个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时我在哪里监听事件。
这周必须有一个更简洁的方法吗?
由于
答案 0 :(得分:4)
Loader.loadBytes会触发一个完整的事件。请记住将您的监听器添加到Loader.contentLoaderInfo。
但是,如果要加载SWF文件,该文件是使用版本4之前的FlexSDK编译的SWC文件的一部分,则不会获得Event.INIT方法,因为只有在文档类可用时才会触发它。自SDK版本4以来,编译器会注入这样的类。