2010-11-10 5 views
0

Mon composant de liste pour une raison quelconque n'affiche pas les données tirées d'un fichier xml Voici le code même si quand je fais une trace sur "question1" Array je reçois les valeurs. Est-ce que quelqu'un pourrait me dire ce que je fais mal ici?liste composant as3

import fl.controls.List; 
    import fl.data.DataProvider; 
    var myXML:XML; 
    var list:List = new List ;// new list item 
     var question1:Array = new Array(); 
     var myLoader:URLLoader = new URLLoader(); 
     myLoader.load(new URLRequest("quiz1.xml")); 
     myLoader.addEventListener(Event.COMPLETE, processXML); 
     function processXML(e:Event):void 
     { 
     myXML = new XML(e.target.data); 
     list.setSize(200,200); 
     var xpos = (stage.stageWidth/2) - (list.width/2); 
     var ypos = (stage.stageHeight/2) - (list.height/2); 
     list.move(xpos,ypos); 

     for (var i:int=0; i<myXML.*.length(); i++) 
     { 

      question1.push(myXML.questions[i][email protected]); 
      trace(question1); 

     } 
     list.dataProvider=new DataProvider(question1); 
     addChildAt(list,0); 
     } 

Répondre

1

Lorsque vous accédez à une propriété xml, la valeur de retour est typée comme XMLList qui fl.data.DataProvider ne gère pas lors de la construction de son tableau interne. Donnez à ce essayer:

question1.push(myXML.questions[i][email protected]()); 

Une autre option est de laisser DataProvider construire les données directement à partir du xml mais vous aurez probablement besoin d'un labelField ou labelFunction, essayer quelque chose comme ceci:

list.dataProvider=new DataProvider(myXML); 
list.labelField = "idno"; 

En outre, vous souhaiterez peut-être accéder au noeud de question dans un gestionnaire de clic d'élément, auquel cas vous pouvez créer votre tableau source comme suit:

question1.push({ 
    label:myXML.questions[i][email protected](), 
    data:myXML.questions[i] 
}); 
Questions connexes