La classe XML manque de dynamisme
Par -Alexandre LEGOUT aka LAlex- le 17 novembre 2003, 15:29 - AS2 - Lien permanent
Il semble que la classe XML de Flash ne soit pas déclarée comme étant dynamic. Voila qui pose pas mal de problème pour tout ce qui est callback, souvent utilisé dans l'évenement onLoad ... :? Si on veut accéder à un objet via une propriété de l'objet XML, on se voit obligé de ne pas effectuer de typage strict ... 8|
class Dummy {
var node:String;
function Dummy() {
// ...
}
function loadFromXml($file:String) {
var ldXml:XML = new XML();
ldXml.callback = this;
ldXml.load($file);
ldXml.onLoad = function(suc) {
if (suc) {
this.callback.node = this.firstChild.nodeName;
} else {
trace("XML File error");
}
}
}
}Il n'existe aucune propriété nommée 'callback'.
ldXml.callback = this;
Si on enlève le typage fort à la déclaration, ca fonctionne trés bien 8| var ldXml = new XML();
Commentaires
Hmm, ce probleme a deja ete discute a droite a gauche, les solutions proposees sont les trucs qui reviennent regulierement pour le typage fort.
1) pas de typage a la declaration, comme tu le montres
2) operateur []
class Dummy {3) porteevar node:String;
function Dummy() {
// ...
}
function loadFromXml(:String) {
var ldXml:XML = new XML();
ldXml["callback"] = this;
ldXml.load();
ldXml.onLoad = function(suc) {
if (suc) {
this["callback"].node = this.firstChild.nodeName;
} else {
trace("XML File error");
}
}
}
}
class Dummy {var node:String;
function Dummy() {
// ...
}
function loadFromXml(:String) {
var ldXml:XML = new XML();
var callback : Dummy = this;
ldXml.load();
ldXml.onLoad = function(suc) {
if (suc) {
callback.node = this.firstChild.nodeName;
} else {
trace("XML File error");
}
}
}
}
Timoth'
Ha Merci Thimotee! Je me posais la même question que LAlex depuis le début... Ne trouvant pas, j'avais carrément ajouté une propriété "callback" dans le fichier XML.as!
Ooouuhhh! Apellez la police, violation avouée de l'EULA ici!!
stef >> On va te balancer !!!
:D
Bon, je pense que je vais utiliser les crochets finalement ... ca permet de conserver le typage, et utiliser la portée ne me plait pas beaucoup ... :?
Merci !

Moi j'utilise toujours la portée


Je considère qu'il n'est pas utile de garder dans l'instance la propriété "callback".
Au passage je nomme tjs mes callback : _this ... question d'habitude je pense
bye
J'avoue que la portée m'a aidé pour aller vite, mais bon, j'aime pas beaucoup
J'ai juste créé une autre class qui hérite de XML
et du coup, j'ai mis tous les traitements et propriétés que j'met d'habitude
neo >> J'y ai pensé aussi, mais faire une nouvelle classe juste pour avoir l'instruction dynamic, je trouvais ca un peu dommage ... :?
Ouais je sais, mais je mets en même temps d'autres traitements et des logs plus précises
Je n'ai qu'une chose a dire heureusement que neo m'a renvoyé ici parce que je commencais a bouffer mon stylet.
Merci, mon chois c'est tourné vers la porté
Salut à tous !
Bon bah pas je comprend pas tout, le problème qui m'est posée à moi c'est de pouvoir faire un
return(loadFromXml());....sauf que comme c'est asynchrone si dans le fla qui exécute la chose j'ai : import dummy.as;//--Avec çà ben toto est "undefined" et là je vois pas comment faire... Note : J'ai modifié le code pour avoir ceci :objXML = new dummy("file.xml");
toto = objXML.loadFromXml();
//--
trace(toto);
if (suc) {callback.node = <strong>this;
return callback.node;</strong>
} else {
trace("XML File error");
}
Fil des commentaires de ce billet