1 votes

Le fournisseur de données flex ne fonctionne pas si le XML n'a qu'une seule valeur de nœud ou moins.

J'obtiens cette erreur lorsque je récupère un XML qui ne comporte qu'un seul nœud (pas de nœuds répétitifs) et que j'essaie de le stocker dans un ArrayCollection. -Lorsque j'ai PLUS d'un nœud "nom", je n'obtiens PAS d'erreur. Mes tests montrent que XMLListCollection ne fonctionne pas non plus.

TypeError: Error #1034: Type Coercion failed: cannot convert "XXXXXX" to mx.collections.ArrayCollection.

cette erreur se produit comme la ligne de code :

myList= e.result.list.name;

Pourquoi ArrayCollection ne peut pas fonctionner avec un seul nœud ? J'utilise ce ArrayCollection comme fournisseur de données pour un composant. Existe-t-il une autre solution qui prenne en charge à la fois les nœuds uniques et les nœuds répétitifs et qui fonctionne comme fournisseur de données ? Merci d'avance !

code :

[Bindable]
private var myList:ArrayCollection= new ArrayCollection();

        private function getList(e:Event):void{

            var getStudyLoungesService:HTTPService = new HTTPService();
            getStuffService.url = "website.com/asdf.php";
            getStuffService.addEventListener(ResultEvent.RESULT, onGetList);
            getStuffService.send();

        }

        private function onGetList(e:ResultEvent):void{

            myList= e.result.list.name;
        }

1voto

Ladislav Points 1303

Le problème est que si vous n'avez qu'une seule ligne, Flex se plaindra car il ne peut pas utiliser le résultat comme arrayCollection.

Je me suis arrangé pour que vous mettiez le nombre de lignes dans votre XML avec les données que vous voulez retourner : par exemple, je l'ai fait :

<list><nr_rows>3</nr_rows><name>...</name><name>...</name><name>...</name></list>

Ainsi, lorsque je reçois le résultat, je vérifie le nombre de lignes que j'obtiens avec (Vous pouvez obtenir le nombre de lignes retournées par la requête MySQL avec mysql_num_rows )

e.result.list.nr_rows

Donc, s'il y en a un, vous ajoutez Object au arrayCollection, s'il y en a plus d'un, vous pouvez simplement utiliser le résultat et l'égaler à AC (dans ce cas, les projets sont AC) :

if (event.result.list.nr_rows == '1'){
    myList.addItem(event.result.list.name);
} else {
    myList = event.result.list.name;
}

0voto

Vijey Points 769

Si vous ne tenez pas à obtenir le résultat final dans un ArrayCollection, vous pouvez procéder comme suit pour obtenir le résultat final dans une XMLList ou une XMLListCollection.

1) définir la propriété resultFormat de HTTPService à e4x.

2) Ne mentionnez pas le nom de la balise xml racine lorsque vous y faites référence. Référencez la sortie comme : myList:XMLList = e.result.name.

Cela fonctionne que le XML récupéré comporte un ou plusieurs éléments.

0voto

istrasci Points 368

J'ai eu ce problème aujourd'hui et cela m'a conduit à cette question. Je ne suis pas sûr que votre cas d'utilisation soit exactement le même que le mien, mais vous pourriez essayer de showRoot="true" sur le mx:Tree. Il semble forcer le nœud racine à s'afficher lorsqu'il n'y a qu'un seul élément, et il est ignoré lorsque plusieurs éléments sont présents.

-1voto

firstboy Points 11

Ajouter un objet row pour obtenir la rangée du nœud XML peut fonctionner, mais je pense qu'une meilleure méthode doit être, est ActionScript est aussi puissant que Java ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X