2009-07-22 11 views
3

私はflexアプリケーションの前に値を解析する必要がある構成XMLファイルを持っています。アプリケーション開始/初期化の前にxmlファイルをflexでロードする

私は、xml設定ファイルの値を取得できる静的クラスを作成しました。

アプリケーションが最初にロードされたときに、このクラスを初期化していますが、xmlファイルが実際にロードされる前にクラスに値を要求されていることを同期クラスをロードするLoaderクラスがロードされるため、エラー。

このxmlファイルを同期して読み込む方法はありますか、誰かがこれを回避する方法を提案できますか?値をリモートで変更する必要があるため、ファイルをクラス変数として埋め込むことはできません。

答えて

7

設定した初期化関数をオーバーライドする必要があります。

<?xml version=”1.0″ encoding=”utf-8″?> 
    <mx:Application 
     xmlns:mx=”http://www.adobe.com/2006/mxml” 
     preinitialize=”preInitHandler(event)”> 

     <mx:Script> 
      <![CDATA[ 

       private function preInitHandler (event : Event) : void 
       { 
        //load the xml, add the xmlCompleteHandler as a listener 
       } 

       private function xmlCompleteHandler (event : Event) : void 
       { 
        //handle the xml 
        super.initialized = true; 
       } 

       override public function set initialized (value : Boolean) : 
        void 
       { 
        // don't do anything, so we wait until the xml loads 
       } 

      ]]> 
     </mx:Script> 

    </mx:Application> 
+0

あるこのいただき、誠にありがとうござい魅力のように働きました。 – Jon

0

州の使用はどうですか?デフォルト状態では、xmlがロードされている間にスピンナーが表示され、ロードプロセスの完全なイベントのハンドラがスピンナを削除してメインコンテナを追加する別の状態に変わります。

また、Flexでは、ファイルを同期して読み込むことはできません。

0

ニーストリック、Quoo、しかし... 一つは、フレームワークが真=初期化 を呼び出す前にXMLファイルがロードされた場合に対処する必要があります。

このようなもの: private var _fileLoaded:Boolean = false;
private var _initialized:Boolean = false;

プライベート関数xmlCompleteHandler(イベント:イベント):無効
//扱うXML
_fileLoaded =はtrue。
super.initialized = _fileLoaded & & _initialized;

オーバーライドpublic function set initialized(value:Boolean):void {
_initialized = value;
super.initialized = _fileLoaded & & _initialized;

}

0

私は、アプリケーションがオンラインに置かれたときに初期化プロパティをオーバーライドすることは非常にうまく処理しないことを見出しました。

代わりに、creationPolicyプロパティを使用する方がよいでしょう。 'none'に設定すると、このプロパティはcreateComponentsFromDescriptorsメソッドが呼び出されるまでコンテナの子の作成を保持します。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
       layout="absolute" 
       preinitialize="{loadStuff();}" 
       creationPolicy="none"> 

<mx:Script> 
    <![CDATA[ 

     private function loadStuff():void { 
      // Load your stuff here 
     } 

     private function loadStuffHandler(event:Event):void { 
      // This should be called when loading (from loadStuff method) finishes 
      createComponentsFromDescriptors(); 
     } 

    ]]> 
</mx:Script> 

</mx:Application> 
0

再:ジャミ... createComponentsFromDescriptors();は今createDeferredContent();

関連する問題