2009-07-22 6 views
3

J'ai un fichier xml de configuration dont j'ai besoin pour analyser les valeurs avant qu'une application flexible ne soit installée.Charger le fichier xml en flex avant le démarrage/initialisation de l'application

J'ai créé une classe statique qui permet d'extraire les valeurs du fichier de configuration xml. J'initialise cette classe lorsque l'application est chargée pour la première fois, mais lorsque le fichier xml est chargé avec une classe Loader chargeant de manière synchrone, des valeurs sont demandées à la classe avant que le fichier xml ne soit réellement chargé. Erreur.

Existe-t-il un moyen de charger ce fichier xml de manière synchrone ou quelqu'un peut-il suggérer une solution? Nous ne pouvons pas incorporer le fichier en tant que variable de classe car nous devons être en mesure de modifier les valeurs à distance.

Répondre

7

Vous devez remplacer la fonction initialisée.

<?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

Merci beaucoup pour cela a fonctionné comme un charme. – Jon

0

Comment utiliser les états? L'état par défaut affiche un spinner tandis que le xml se charge, et le gestionnaire de l'événement complet du processus de chargement passe à un autre état qui supprime le spinner et ajoute votre conteneur principal.

Et non, vous ne pouvez pas charger un fichier de manière synchrone dans Flex.

0

trick Nice, Quoo, mais ... un devoir gérer le cas où un fichier XML a été chargé avant les cadres appellent initialisés = true.

Quelque chose comme ceci: private var _fileLoaded: Boolean = false;
private var _initialized: Boolean = false;

fonction privée xmlCompleteHandler (event: Event): void
// gérer le xml
_fileLoaded = true;
super.initialized = _fileLoaded & & _initialisé; Override public function set initialisé (valeur: booléenne): void {
_initialized = valeur;
super.initialized = _fileLoaded & & _initialisé;

}

0

J'ai trouvé que l'annulation de la propriété initialisé ne gère pas très bien lorsque l'application est mise en ligne. Au lieu de cela, il vaut mieux utiliser la propriété creationPolicy. Lorsqu'elle est définie sur 'none', cette propriété met en attente la création du conteneur par l'enfant jusqu'à ce que la méthode createComponentsFromDescriptors soit appelée.

<?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

re: Jami ... createComponentsFromDescriptors(); est maintenant createDeferredContent();

Questions connexes