2009-11-24 8 views
0

Cela peut être une vieille question fatiguée, mais je n'ai pas encore trouvé une bonne réponse. Dites par exemple que vous avez une classe qui lit dans un fichier xml pour obtenir des informations telles que les articles d'épicerie, les prix, etc. Cette classe vous permet également de récupérer les informations sur un article d'épicerie avec une fonction get().Lecture dans un fichier (AS3) et accès répété/dynamique aux données

var grocery:GroceryStore = new GroceryStore(); //create a class that 
               //reads in xml about 
               //grocery items 

grocery.get("lettuce");      //get some data 

Dans ce scénario, je suis constamment en cours d'exécution sur des questions parce que la fonction get() est appelée avant l'événement qui se charge dans le fichier xml. Il ne serait pas logique de placer le get() dans l'événement onLoad pour le fichier xml parce que je veux qu'il soit réutilisable et dynamique. En outre, AS3 n'a pas une fonction wait() donc je ne peux pas caler jusqu'à ce que le fichier est chargé? Quelqu'un at-il une idée sur la façon de lire dans un fichier et ensuite être en mesure d'accéder en toute sécurité aux données de façon dynamique et à plusieurs reprises? Espérons que cet exemple et ma question soient assez approfondis, sinon faites le moi savoir.

Merci

+0

Chambre/en attente jusqu'à ce que le fichier est chargé est une mauvaise idée. Personne n'aime une application qui ne répond pas. L'affichage d'une barre de progression/chargement de l'écran pendant le chargement des données ** est une bonne idée. Créez une classe qui attend le XML onLoad et affiche automatiquement un écran de chargement. – leepowers

Répondre

1

Vous pouvez utiliser des événements - écouter l'événement complete à expédier.

Ajoutez le code suivant à GroceryStore classe

//constructor or a load method 
var ldr:URLLoader = new URLLoader(); 
ldr.addEventListener(Event.COMPLETE, onLoad); 
ldr.load(new URLRequest(xmlurl)); 
function onLoad(e:Event):void 
{ 
    //process xml here 
    dispatchEvent(e); 
} 

utiliser maintenant comme:

var grocery:GroceryStore = new GroceryStore(); 
grocery.addEventListener(Event.COMPLETE, onGroceryLoad); 
function onGroceryLoad(e:Event):void 
{ 
    grocery.get("lettuce"); 
}