【问题标题】:Loader.loadBytes and getDefinitionByNameLoader.loadBytes 和 getDefinitionByName
【发布时间】:2010-02-06 10:58:44
【问题描述】:

我目前正在开发一个项目,该项目将加载一个 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 中的时间。

一定有更简洁的方法解决这个问题?

谢谢

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

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

    但是,如果您加载的 SWF 文件是使用 FlexSDK 第 4 版之前编译的 SWC 文件的一部分,您将不会获得 Event.INIT 方法,因为它仅在文档类可用时才会触发。从 SDK 版本 4 开始,编译器就会注入这样的类。

    【讨论】:

    • 非常感谢您快速准确的回答。我以前也被这件事抓住过。他们这样做似乎很奇怪。如果他们为每个加载调用返回一个信息对象,那么我可以看到它是用于并发加载的。如果有并发负载,您将无法侦听不同的事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多