2010-05-05 4 views
2

문제점 : 에 XML 구성 파일을로드하고 응용 프로그램의 createChildren()이 호출 될 때 준비해야합니다. 자식 구성 요소를 제대로 초기화하려면 구성 값이 필요하기 때문에 늦어도. 가급적이면 응용 프로그램이 만들어지기 전에 구성로드가 완료되기를 바랍니다. 즉, 나는이 작업을 수행 할 : 다음응용 프로그램을 초기화하기 전에 Flex에서 파일을 미리로드하는 방법

  1. 로드 구성,
  2. 가로드 된 구성을 사용하여 응용 프로그램을 초기화합니다.

이 문제를 해결하기 위해 맞춤형 프리 로더를 만들었습니다. 그러나 구성이 아직로드되지 않을 것으로 예상되는 사전로드 중에 응용 프로그램의 createChildren() 메서드가 이미 호출됩니다. 즉, 사용자 정의 프리 로더가 COMPLETE 이벤트를 전달하기 전에.

사전에 도움을 주셔서 감사합니다.

(사이비 코드)

Application.mxml :

답변

3

나는 해결책을 발견 문제에. 핵심은 프리 로더의 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"> 
1

가장 간단한 방법은 (내가 생각하는) 상황에 맞는 파일을로드 한 후 응용 프로그램 콘텐츠를 만들 것 '홀더'캔버스, 즉를 만드는 것입니다 :

<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

실제로 해결 방법으로, 그러나 더 나은 방법이 있는지 알고 싶다고 사용. 귀하의 제안에 감사드립니다. –

관련 문제