Passage de paramètres à des écouteurs d'événement / gestionnaires

Comment passer des paramètres /variables à travers les écouteurs d'événement? J'ai surmonter ce problème assez efficacement à l'aide de fonctions anonymes; ce qui est incroyablement une solution simple, mais à la fin de la journée, il sent comme une grosse lacune pour la fonctionnalité que je me sens devrait être fournis en natif, de toute façon.

Normalement la vie irait, mais comme le destin l'aurait, maintenant j'ai en fait besoin de supprimer l'auditeur, et de le faire lorsque vous avez à l'aide d'une fonction anonyme est un peu funky. Donc, encore une fois, je suis à essayer de comprendre comment passer des paramètres grâce à des écouteurs d'événement, de sorte que les écouteurs d'événement peut être retiré simplement en référencement de la fonction.

Aussi étrange que cela puisse paraître, j'ai surmonter ce problème ainsi, MAIS, je ne l'aime pas et fatigué de l'utiliser. À mon avis, il est odeur de code. Mais il fonctionne comme un charme. - Je stocker la variable, un objet ou quoi que ce soit sur la répartition MovieClip. Donc, si je suis en boucle si un tableau de données, la génération de vignettes à la volée, j'ai simplement stocker la variable de données (normalement un objet avec plusieurs propriétés) dans la vignette MovieClip. Ensuite, je peux accéder à toutes les données dans un écouteur d'événement par la méthode de référencement:

événement.cible.les données

.
Dans cet exemple, les "données" est le nom de la variable holding holding les informations que je souhaite. Car un autre problème qui surgit lorsque je ne l'utilise pas c'est que quand je suis en boucle dans un tableau et de générer des vignettes cliquez sur pour afficher des images de grande taille, l'indice n'est pas cohérente. À la fin de la boucle, TOUTES les thumbails seront tous ouvrir une image à l'aide du dernier indice du "je". Donc, si j'avais un tableau avec une longueur de 12 ans, ils avaient tous de la charge de la 12e image indépendamment de ce que la vignette sur lequel vous avez cliqué. Stocker les données dans le MovieClip lui-même, crée une référence solide qui ne change jamais.

Cela a été me tracasse depuis un certain temps maintenant. Fondamentalement, ce que je veux savoir, c'est, est-ce une bonne pratique, il y a de meilleures solutions?

Ci-dessous sont quelques-uns régime des exemples. Je peux poster des exemples plus détaillés, si nécessaire. Tous les exemples illustrent une vignette qui charge une grande image quand on clique dessus.

Sans l'utilisation d'une fonction anonyme (le problème):

tempThumb.la méthode addEventListener(MouseEvent.CLIQUEZ sur, loadImage); 

publique fonction loadImage(_event:MouseEvent):void 
{ 
//Je n'ai pas la variable _url et de préparer un bain chaud avec une froide lame 
} 

L'utilisation d'une fonction anonyme:

tempThumb.la méthode addEventListener(MouseEvent.CLIQUEZ sur la fonction(_event:MouseEvent) { loadImage("large.jpg"); } ); 

publique fonction loadImage(_url:String):void 
{ 
//J'ai eu la variable _url et de ranger les lames de rasoir 
} 

Sans l'utilisation d'une fonction anonyme, mais à l'aide de mon malodorante Lutin technique de stocker les données dans le MovieClip envoi de l'événement

tempThumb.data = "large.jpg"; 

tempThumb.la méthode addEventListener(MouseEvent.CLIQUEZ sur, loadImage); 

publique fonction loadImage(_event:MouseEvent):void 
{ 
trace(event.cible.données); 
//Je peux accéder à la variable 
} 

Je ne suis pas doué en place sur la programmation de la terminologie, de sorte que j'ai surnommé le au-dessus de la Leprechaun Technique. Stockage /masquer des variables dans les objets pour les utiliser plus tard /l'accès. Il résout tous mes problèmes et fonctionne étonnamment bien. Mais, si il ya une meilleure façon de le faire, je veux savoir que.

OriginalL'auteur Daniel Carvalho | 2009-09-23