Forum de discussion
Forum « Flash et Shockwave » (archives)
Re: Recursivité en AS 2.0 / passage d'un Object
Envoyé: 3 octobre 2004, 8h11 par Oznog
Oups, finalement tu ne la pas trop masacré le code, j'ai passé quelque temps ce matin à le regarder et ce n'est pas du tout ce que je pensais, enfin presque. Mais il manque toujours des chose.
En fait c'est un prototype AS1 qui a été partiellement transformé AS2 pour fonctionner avec une class.
Il y a deux astuces dans ce code.
1. L'objet de XML n'a aucune référence directe au clip qui le contient. De là l'astuce du "XMLMember extends XML" qui te manquait. Essentiellement pour permettre à la fonction "doConvert" de travailler sur le membre "this.XMLArray". Voir pour plus d'information sur "Bit-101" (http://www.bit-101.com/blog/archives/000023.html). Ceci dit, tu peux poublier cette portion du code, elle fonctionne très bien. La preuve le "n" passe bien l'objet XML à la fonction "doConvert".
2. La fonction "doConvert" permet de compler un manque avec Flash. L'objet flash à un sérieux manque par rapport aux autres moteurs XML. Il ne permet pas de cibler directement le nom d'un noeud. C'est un arbre et la seule façon de s'y retrouver est de faire des comparaison. Bien sûr tu navigue normalement avec tes méthodes XML "firstChild" etc mais tu compare le type du noeud et/ou s'il a des enfants pour enfin comparer le nom du noeud ou balise (nodeName) avec "menu" par exemple. Ce qui n'est pas très portable et très loing de l'idéologie XML.
C'est là que la fonction "doConvert" entre en jeu, pour convertir le tout en structure qui permet de cibler directement un noeud avec son nom. Ex: XMLArray.menu[0].itemText[0].
De là mon erreur avec XMLArray qui n'est pas du tout une matrice (array) mais bien un véritable objet ({}).
J'ai pas encore eu le temps de faire le tout de cette fonction, plusieurs astuce AS2 à saisir en même temps. Mais déjà j'ai noté une erreur.
Tu as comme résuktat :
XML [object Object]
XML undefined
XML undefined
...
Dès que tu change le type de contenu d'une variable son type change. Si tu mets this.XMLArray = 'allo'. Oups, ton XMLArray n'est plus un objet. C'est un peut ce que tu fais dans cette ligne.
if (this.XMLArray[k=n.nodeName] == null) this.XMLArray = ((a=this.XMLArray[k]))[d=0];
Il est vide et tu lui met du vide! Il faudrait plutôt :
if (this.XMLArray[k=n.nodeName] == null) this.XMLArray = ((a=this.XMLArray[k]=[{}]))[d=0];
Déjà là tu ne perdra plus ton objet et obtenir le résultat :
XML [object Object]
XML [object Object]
XML [object Object]
XML [object Object]
...
Mais il reste encore à faire. Ce n'est pas tout à fait ça encore. Dès que j'ai une minute j'y jette un oeil plus attentif. En attendant, peux-tu nous dire où tu as trouvé cette traduction AS2 de XML2AS. Je ne trouve même pas l'original que tu dit de "Justin Watkins", dans un livre? Note que cette fonction (XML2AS) en AS1 se trouve partout.
Ciao
Oznog
Réponses
|