2011-02-07 2 views
0

J'ai ce projet pour l'école où je dois remplir un contrôle liste déroulante à partir d'un fichier xml. Je me débrouille pour faire ça pour un contrôle d'entrée d'étiquette/texte, mais je n'arrive pas à le faire sur une liste déroulante. Je reçois cette erreur chaque fois que je lui dis « additem » avec une requête xml (ne pas obtenir avec un texte simple): « # 1009 Impossible d'accéder à une propriété ou une méthode d'une référence d'objet nul »Mettre une requête XML dans un contrôle de liste déroulante

Ceci est la fonction obtenir le fichier xml:

private function myFunc(event:ResultEvent):void 
{ 
    myXml=event.result as XML; 
} 

Ceci est la fonction après le lancement, le contrôle se construire:

protected function ActivityDropDown_creationCompleteHandler(event:FlexEvent):void 
{ 

    droplistdb=new ArrayList(); 
    ActivityDropDown.dataProvider=droplistdb; 
    droplistdb.addItem({label:myXml.Activity.(attribute("publish")=="true").ActivityName}); 
} 
+0

Etes-vous sûr qu'un élément d'activité avec l'attribut publish est true dans votre fichier XML? – jswolf19

Répondre

0

Voici quelques réglages de couple qui devrait faire le débogage ce un peu plus facile.

Ne commencez pas par créer une nouvelle ArrayList uniquement pour le fournisseur de données de DropDown. Définissez simplement XMLList d'Actitivies en tant que dataProvider et utilisez un labelFunction pour extraire le ActivityName du XML.

Voici votre debug labelFunction.

//set a breakpoint on each line 
function(obj:XML):String{ 
    var activityName:XML = obj.ActivityName; 
    return activityName.toString(); 
} 

Si vous ne parvenez pas à la fonction de l'étiquette alors cette requête E4X ne va pas -> myXml.Activity (attribut ("publish") == "true"). Vous aurez envie de le décomposer pièce par pièce. Essayez d'obtenir une liste XML appropriée des noeuds myXml.Activity?

trace(myXml.Activity.length());//should show the number of Activity nodes 

Essayez-le et faites-nous savoir comment ça se passe.

+0

Merci pour la réponse rapide, tout d'abord la requête e4x est correcte, je sais que parce que je l'ai mis à une étiquette et il m'a donné ce que je voulais. Deuxièmement, j'ai découvert quel est le problème: une partie était un lecteur flash non mis à jour. L'autre partie est que la fonction complete de création n'obtient pas une variable "myXml" initialisée. ce qui signifie qu'il obtient une variable vide. Si je teste la requête dans la première fonction "myfunc" cela fonctionne très bien. – Dudipoli

+0

okay cool. Le débogage XML peut parfois être un peu pénible car il n'est pas structuré comme un objet traditionnel (le prix à payer pour la syntaxe de l'interrogation douce). – Shakakai

+0

Donc, après avoir trouvé ce qui semble être le problème, j'ai mélangé les deux fonctions et maintenant son fonctionnement. Merci pour l'essayer ici est ce qui a fonctionné pour moi: myFunc private function (event: ResultEvent): void \t \t \t { \t \t \t \t myXML = event.result en XML; \t \t \t \t droplistdb = new ArrayList(); \t \t \t \t ActivityDropDown.dataProvider = droplistdb; \t \t \t \t droplistdb.addItem ({label: myXml.Activity. (Attribut ("publish") == "true"). ActivityName}); \t \t \t} – Dudipoli

Questions connexes