Übergabe-Parameter an Ereignis-Listener / Handler

Wie haben Sie die übergabe von Parametern /Variablen, die durch Ereignis-Listener? Ich habe dieses problem lösen können relativ effektiv mit Hilfe anonymer Funktionen, die eine unglaublich einfache Lösung, aber am Ende des Tages, es riecht wie ein riesiges Schlupfloch für Funktionalität, die ich fühle mich sollte zur Verfügung gestellt werden nativ sowieso.

Normalerweise Leben würde weitergehen, aber wie das Schicksal es wollte, jetzt habe ich tatsächlich benötigen, um den listener entfernen, und tut so, als habe Sie mithilfe einer anonymen Funktion ist ein bisschen funky. Also, noch einmal, ich versuche, herauszufinden, wie die übergabe von Parametern durch, um Ereignis-Listener, so dass die event-Listener entfernt werden kann einfach durch verweisen auf die Funktion.

So seltsam, wie es scheinen mag, ich habe zu überwinden dieses Problem sowie, ABER ich mag es nicht, und müde, es zu benutzen. Meiner Meinung nach ist der code, den Geruch. Aber es funktioniert wie ein Charme. Ich Speichere die variable, ein Objekt oder was auch immer auf den Versand MovieClip. Also, wenn wechsele ich aber ein array von Daten, das erstellen von thumbnails on-the-fly, habe ich einfach die Daten gespeichert, die variable (normalerweise ein Objekt mit mehreren Eigenschaften) in der eigentlichen thumbnail-MovieClip. Dann kann ich Zugriff auf alle Daten, die in einem Ereignis-listener-Methode verweisen:

Veranstaltung.Ziel.Daten

.
In diesem Beispiel "Daten" die Namen der Variablen halten halten die Informationen, die ich will. Denn ein weiteres Problem, das auftaucht, wenn ich nicht dieses ist, ist, dass wenn ich die Schleife durch ein array und die Generierung von Miniaturansichten, die auf zu große Bilder, die index ist nicht konsistent. Am Ende der Schleife werden ALLE die thumbails alle öffnen Sie ein Bild mit dem letzten index des "ich". Wenn ich also ein array mit einer Länge von 12, Sie würde alle Last der 12th Bild, unabhängig davon, was Miniaturansicht, auf die Sie geklickt haben. Die Speicherung der Daten in den MovieClip selbst, schafft eine solide Referenz, die sich nie ändert.

Diese wurde stört mich seit einiger Zeit. Im Grunde, was ich wissen möchte ist, ist diese gute Praxis, gibt es bessere Lösungen gibt?

Im folgenden sind einige Diät-Beispiele. Kann ich nach mehr detaillierte Beispiele, wenn nötig. Alle Beispiele zeigen eine Miniaturansicht, die Lasten, die ein großes Bild, wenn darauf geklickt.

Ohne die Verwendung einer anonymen Funktion (das problem):

tempThumb.addEventListener(MouseEvent.KLICKEN Sie auf, loadImage); 

public function loadImage(_event:MouseEvent):void 
{ 
//Ich habe nicht die variable _url und bereiten Sie ein heißes Bad mit einem kalten Klinge 
} 

Verwendung einer anonymen Funktion:

tempThumb.addEventListener(MouseEvent.KLICKEN Sie auf, Funktion(_event:MouseEvent) { loadImage("large.jpg"); } ); 

public function loadImage(_url:String):void 
{ 
//Ich habe die variable _url und die Verpackung entfernt die Rasierklingen 
} 

Ohne die Verwendung einer anonymen Funktion, aber mit meinem stinkenden Kobold Technik der Speicherung der Daten in das MovieClip, das das Ereignis auslöst

tempThumb.Daten = "large.jpg"; 

tempThumb.addEventListener(MouseEvent.KLICKEN Sie auf, loadImage); 

public function loadImage(_event:MouseEvent):void 
{ 
trace(event.Ziel.Daten); 
//Kann ich den Zugriff auf die variable 
} 

Ich bin nicht clued auf die Programmierung Terminologie, so habe ich die genannt, die über die Kobold-Technik. Lagern /verstecken von Variablen in Objekte für die spätere Verwendung. Es löst alle meine Probleme und funktioniert erstaunlich gut. Aber, wenn es gibt ein besserer Weg, es zu tun, ich will wissen , dass Weg.

InformationsquelleAutor Daniel Carvalho | 2009-09-23

Schreibe einen Kommentar