Je cherche à construire une classe générique ChargeurXML avec une méthode LOAD
statique, avec l'intention de l'utiliser comme suit ...Méthode statique pour la classe XMLLoader ... comment retourner des données XML après la fonction Event.COMPLETE?
private var _data:XML = XMLLoader.LOAD("path/to/xml_file.xml");
alors je pourrais l'utiliser dans tout client et aller à la ville avec e4x.
Le problème général que je rencontre concerne l'événement COMPLETE
de l'URLLoader, qui appelle nécessairement une fonction différente pour définir les données XML. Cela m'empêche de pouvoir renvoyer le code XML à partir de la méthode LOAD
, puisque les données sont définies en dehors de cette fonction. Évidemment, je dois attendre l'événement COMPLETE
afin de m'assurer que les données sont disponibles.
Je pensais, peut-être, que je pourrais créer et retourner une fonction _waitForData
, qui s'appelle récursivement jusqu'à ce que la donnée soit définie, puis renvoie les données. Mais il semble redondant (puisque Event.COMPLETE
le fait de toute façon), et la façon dont je l'ai essayé génère une erreur de débordement de pile.
Heres ce que j'ai essayé:
public class XMLLoader {
private static var _url:String = "";
private static var _data:XML = null;
public static function LOAD(url:String):XML {
_url = url;
var _xmlLoader:URLLoader = new URLLoader();
_xmlLoader.addEventListener(Event.COMPLETE, _setData);
_xmlLoader.load(new URLRequest(_url));
return _waitForData();
}
static function _setData(e:Event):void {
XML.ignoreWhitespace = true;
_data = new XML(e.target.data);
}
static function _waitForData():XML {
if(_data == null) {
_waitForData();
}
return _data;
}
public function LoadXML() {}
}
je suis assez nouveau au concept de fonctions récursives, donc j'ai un sentiment que je mis en œuvre ma fonction _waitForData mal (si elle même une bonne idée du tout). J'apprécierais tous les pointeurs sur l'utilisation de méthodes statiques de cette façon, et si ce que j'essaie de faire est possible ... semble être une bonne idée, je pense.
Ceci est un exemple EXTRÊMEMENT instructif, bien au-delà de la réponse que j'espérais. J'étudierai minutieusement vos commentaires et mon exemple de code et suggérerai aux autres de le faire aussi. Merci! –
@Logic Artist. Pas de problème, je suis content que vous trouviez mon anwser utile. –