2010-10-03 6 views
0

Je tente d'importer des données XML simples dans Flash ActionScript 3.0. Je peux facilement faire cela comme une importation qui est postée sur la scène, mais je veux l'enregistrer comme une variable globale à la place. Voici le fichier XML que je tire de:ActionScript: Comment importer des données XML en tant que variables (pas en tant qu'événement)

<utilitySavings> 
<nameof file="academicWaterSavings"> 
    <waterValue>100</waterValue> 
    <elecValue>200</elecValue> 
</nameof> 
<nameof file="dormWaterSavings"> 
    <waterValue>300</waterValue> 
    <elecValue>400</elecValue> 
</nameof> 
<nameof file="greekWaterSavings"> 
    <waterValue>500</waterValue> 
    <elecValue>600</elecValue> 
</nameof> 
<nameof file="totalWaterSavings"> 
    <waterValue>1500</waterValue> 
    <elecValue>1600</elecValue> 
</nameof> 

... et voici le actionscript:

var req:URLRequest = new URLRequest("data.xml"); 
var loader:URLLoader = new URLLoader(); 
var utilitySavings:XML; 

function xmlLoaded(event:Event):void 
{ 
    utilitySavings = new XML(loader.data); 
    academicWater.text = utilitySavings.nameof[0].waterValue; 
    academicElec.text = utilitySavings.nameof[0].elecValue; 
    var dormWater:String = utilitySavings.nameof[1].waterValue; 
    trace (dormWater); 
} 

loader.addEventListener(Event.COMPLETE, xmlLoaded); 
loader.load(req); 
trace(academicWater.text); 

Remarquez la «trace (dormWater) Je veux tracer ceci en dehors de la fonction donc il est accessible plus tard dans mon script. Je peux tracer dans la fonction, mais cela ne me fait aucun bien. Je suis également capable de faire apparaître le texte dynamique sur la scène mais, de même, cela me fait peu de bien.

J'apprécie n'importe quelle aide ou perspicacité.

+1

s'il vous plaît prendre quelques minutes pour apprendre comment formater vos messages pour que les autres ne doivent pas le faire en votre nom. http://stackoverflow.com/editing-help – spender

+0

Eh bien, j'ai essayé, mais vous venez de les écraser. Grr. – spender

+0

Désolé ... la première fois à apprendre à écrire du code. Je pense que je l'ai compris maintenant. ... et il est formaté tout joli maintenant. – Tony

Répondre

0

Je peux voir plusieurs façons d'y parvenir, si vous voulez créer un objet globalement accessible, créer un Singleton (non recommandé), charger vos données XML dans ce dernier, puis chaque objet de votre application sera en mesure d'accéder les données XML chargées.
http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html

Le code résultant vous donnerait quelque chose comme ceci:

 
//Available throughout your app after the XML has been loaded & parsed 
var dormWater:String = Singleton.dormWater; 

Bien que vous déclarez ne voulez pas les événements, je pense que l'utilisation de signaux pourrait être une meilleure approche. Chargez votre fichier XML et envoyez un signal contenant la chaîne appropriée à l'objet qui en a besoin, lorsque vous recevez le signal, affectez la chaîne à une variable.
http://www.peterelst.com/blog/2010/01/22/as3-signals-the-best-thing-since-sliced-bread/

 
//In a specific class 
private var _dormWater:String; 

private function signalListener(value:Object):void 
{ 
    _dormWater = value.dormWater; 
} 
Questions connexes