2010-01-29 5 views
0

J'essaie de déclarer des variables privées qui seront utilisées ailleurs dans mon application principale flex mxml. Mais je dois seulement créer les variables quand leur nombre est égal dans mon dossier de xml.créer private var yada: Peu importe; en fonction du nombre de xml

Mon extrait de xml ressemble à ceci:

<POIs> 
    <location> 
      <name>jane</name> 
      <lat>12345</lat> 
      <long>12345</long> 
      <iconFile>jane_icon.gif</iconFile> 
      <imageFile>jane_img.swf</imageFile> 
      <motion>no</motion> 
    </location> 
    <location> 
      <name>john</name> 
      <lat>23456</lat> 
      <long>23456</long> 
      <iconFile>john_icon.gif</iconFile> 
      <imageFile>john_img.swf</imageFile> 
      <motion>no</motion> 
    </location> 
</POIs> 

Mon principal fichier MXML flex ressemble à ceci:

//------------------------------------------------------------------------------0 
private var locPointMarker0:PointMarker; 
private var locPointMarker0_lat:Number; 
private var locPointMarker0_long:Number; 

//------------------------------------------------------------------------------1 
private var locPointMarker1:PointMarker; 
private var locPointMarker1_lat:Number; 
private var locPointMarker1_long:Number; 

//------------------------------------------------------------------------------2 
private var locPointMarker2:PointMarker; 
private var locPointMarker2_lat:Number; 
private var locPointMarker2_long:Number; 

//------------------------------------------------------------------------------3 
private var locPointMarker3:PointMarker; 
private var locPointMarker3_lat:Number; 
private var locPointMarker3_long:Number; 

Je ne veux pas déclarer 2000 variables privées quand mon xml pourrait n'avoir 500 emplacements.

Voici comment mon xml est ajouté à mon application flex:

public function getXMLData():void 
{ 
    var locXMLLoader:URLLoader = new URLLoader(locXMLURL); 
    locXMLLoader..addEventListener(Event.COMPLETE, xmlLoaded); 
    function xmlLoaded(e:Event):void 
    { 
     try 
     { 
      locXML = XML(locXMLLoader.data); 
      locXML.location.(parseLocXML(
       valueOf().name.toString(), 
       parseFloat(valueOf().lat.toString()), 
       parseFloat(valueOf().long.toString()), 
         valueOf().iconFile.toString(), 
         valueOf().imageFile.toString(), 
         valueOf().motion.toString())); 
     } catch(e:Error) 
     { 
      trace("XML Load Error: " + e.message) 
      return; 
     } 
    } 
} 

public function parseLocXML(nodeName:String, lat:Number, 
      long:Number, iconFile:String, 
      imageFile:String, motion:String):void 

{ 
    if (XMLpCounter==0) 
    { 
    addMarkers(); ///this is just one of the functions that requires the private vars 
    } 
    XMLpCounter++; 
} 

J'ai essayé le code similaire ci-dessous, mais il ne fonctionne pas parce que locXML ne se définit pas vraiment jusqu'à ce que son est analysé.

//------------------------------------------------------------------------------1 
if(locXML.location.length()>=1){ 
    trace("1 has been added as a variable"); 
    private var locPointMarker1:PointMarker; 
    private var locPointMarker1_lat:Number; 
    private var locPointMarker1_long:Number;} 
      //------------------------------------------------------------------------------2 
if(locXML.location.length()>=2){ 
    trace("2 has been added as a variable"); 
    private var locPointMarker2:PointMarker; 
    private var locPointMarker2_lat:Number; 
    private var locPointMarker2_long:Number;} 

Est-il possible d'attendre que le xml soit chargé avant de déclarer ces variables?

Répondre

1

Avez-vous pensé à un tableau d'emplacements. Vos variables 2000 me font mal à la tête.

Location.as:

package my.locations.util { 
    public class Location { 
     public var latitude; 
     public var longitude; 
     public var name; 
     //... others, constructor 
    } 
} 

et

var locations:Array = []; 
var locationsXML:XML = //... 
for (var locationXML:XML in locationsXML.location) { 
    var location:Location = new Location(locationXML.latitude, locationXML.longitude, ...); 
    locations.push(location); 
} 
+0

Je ne sais pas beaucoup sur les tableaux. Je vais examiner cela et voir si je ne peux pas le faire fonctionner. Merci ... En fait, je ne comprends pas complètement les cours non plus. Je suis nouveau à la programmation flash ... a pris un grand projet et a appris en cours de route. – Phil

+0

voulez-vous me faire une faveur et les renommer afin qu'ils correspondent à mon XML? Je ne sais pas comment appliquer ce code à mon but. Les tableaux n'ont pas de sens pour moi. – Phil

+0

c'est la bonne réponse. chaque fois que vous vous retrouvez à écrire "myvar1". "myvar2", vous devez créer un objet de valeur et le stocker dans un tableau. Sinon, que se passerait-il si vous deviez ajouter 9 triplets "lat/long/name"? Vous devez éditer votre classe, et vous ne voulez pas faire ça :) –

Questions connexes