代码之家  ›  专栏  ›  技术社区  ›  Roaders

loader.loadbytes和getDefinitionByName

  •  1
  • Roaders  · 技术社区  · 16 年前

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

    我使用loader.load bytes加载library.swf(字节来自我使用的unzip库)。我使用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 回复  |  直到 16 年前
        1
  •  4
  •   Joa Ebert Emran    16 年前

    loader.loadbytes确实触发了一个完整的事件。记住要将侦听器添加到loader.contentloaderinfo。

    但是,如果加载的SWF文件是在版本4之前使用flexsdk编译的SWC文件的一部分,则不会获取event.init方法,因为它仅在文档类可用时激发。这样的类是自sdk version 4以来由编译器注入的。

    推荐文章