如何在应用程序初始化之前在Flex中预加载文件

问题描述:

问题:需要在运行时加载XML配置文件,并在应用程序的createChildren()被调用时做好准备。最迟,因为需要配置值才能正确初始化子组件。最好,我希望在应用程序创建之前完成配置加载。总之,我想这样做:如何在应用程序初始化之前在Flex中预加载文件

  1. 负载配置,然后
  2. 使用初始化加载的配置应用。

我创建了一个自定义预加载器来帮助解决这个问题。但事实证明,应用程序的createChildren()方法在预加载期间已经被调用,当配置尚未保证加载时。也就是说,在自定义预加载器调度COMPLETE事件之前。

感谢您提前提供任何帮助。

我找到了解决解决问题。关键是捕获预加载器的FlexEvent.INIT_PROGRESS事件,对其进行排队,并在配置完全加载之前停止其传播。这有效地阻止了框架继续进行应用程序初始化。配置加载后,重新分配排队的事件,让框架完成预加载阶段。下面的示例代码(仅适用件):

public class PreloaderDisplay extends Sprite implements IPreloaderDisplay { 
    // mx.preloaders.IPreloaderDisplay interface 
    public function set preloader(preloader:Sprite):void { 
     // max priority to ensure we catch this event first 
     preloader.addEventListener(FlexEvent.INIT_PROGRESS, onInitProgress, false, int.MAX_VALUE); 
     startLoadingConfiguration(); 
    } 
    private function onInitProgress(e:FlexEvent):void { 
     if (isConfigurationLoading) { 
      queuePreloaderEvent(e); 
      e.stopImmediatePropagation(); 
     } 
    } 
    private function onConfigurationLoaded():void { 
     dispatchQueuedPreloaderEvents(); 
    } 
} 

要在应用程序中使用它:

<mx:Application preloader="the.package.of.PreloaderDisplay"> 

最简单的方法(我认为)是创建一个“支架”的画布的背景文件被加载后,将创建的应用程序的内容,即:

(伪代码)

Application.mxml:

<mx:Canvas> 
    <mx:Script> 
     public function init():void{ 
      loadXML(); 
     } 

     public function handleXMLLoaded():void{ 
      this.addChild(myApplicationContent); 
     } 
    </mx:Script> 
</mx:Canvas> 

MyApplicationContent.mxml

<mx:Canvas> 
<!-- contains all your components etc --> 
</mx:Canvas> 
+0

我实际使用,作为一个解决办法,但想知道如果有一个更好的办法。感谢您的建议。 – 2010-05-07 12:45:17