J'ai un problème étrange! J'essaie de supprimer un écouteur d'événement sur un objet FileReference en appelant une fonction, mais il semble ne pas être supprimé, et je ne comprends pas pourquoi.Effacement d'eventListeners sur un objet FileReference
Voici le code:
private function clearFileUploadListeners(file:FileReference, index:String):void {
var dispatchEvent:Function = function(event:Event):void {
dispatch(event.type, event, index);
};
file.removeEventListener(Event.COMPLETE, dispatchEvent);
var bool:Boolean = file.hasEventListener(Event.COMPLETE);
if (bool)
trace("ERROR");
}
Quand je lance ce code, la trace se passe réellement. Je ne comprends pas pourquoi ce booléen retourne vrai, quand j'ai juste essayé d'enlever le eventListener juste au-dessus! Je suppose que je fais probablement quelque chose de vraiment stupide parce que cela semble être une erreur étrange.
J'espère que quelqu'un peut m'aider s'il vous plaît sur cette question.
EDIT:
Je crois qu'il doit faire avec le fait que la fonction dispatchEvent est définie dans une autre fonction quand j'ajoute l'auditeur:
private function upload(file:FileReference, index:String):void {
var dispatchEvent:Function = function(event:Event):void {
dispatch(event.type, event, index);
};
file.addEventListener(Event.COMPLETE, dispatchEvent);
}
Le problème est que je dois accéder à cette "index" variable de l'écouteur, et je ne peux pas le définir comme une variable globale car chaque fichier a son propre index et c'est un fardeau si je dois étendre chaque classe d'événement pour garder une trace de l'index (Event, ProgressEvent,. .). J'espère que quelqu'un peut m'aider s'il vous plaît à ce sujet.
EDIT2:
En fait, je trouve une solution temporaire, je ne sais pas si c'est le meilleur! J'ai mis ma méthode removeListener à l'intérieur de la méthode upload, mais je l'ai transformée en variable. Comme AS3 permet l'objet dynamique, j'ai attaché cette méthode à l'un de mes objets, et donc j'appelle simplement la référence à la méthode si nécessaire. L'événement est réellement supprimé. Est-ce une bonne solution s'il vous plaît?
Merci beaucoup, Rudy
Merci beaucoup, super explication claire, je comprends. J'aime votre solution, elle est très proche de celle que j'avais en tête (j'ai défini une fonction removeListeners() dans ma fonction de téléchargement, et l'ai stockée dans un objet). IE: object.var = removeListeners; then object.var(); C'est semblable au vôtre, je n'ai pas besoin de garder la trace d'un dictionnaire mais plutôt d'utiliser la pile. Merci de votre aide! – Rudy
Heureux d'avoir aidé :-) – Cameron