So entfernen Sie alle Ereignis-Listener von einem display-Objekt?
Gibt es eine Möglichkeit zu bestimmen, welche Ereignis-Listener registriert sind mit einem display-Objekt? Will ich löschen, um alle Ereignis-Listener von einem display-Objekt, so dass ich zuordnen kann, neue basierend auf den Kontext die Veränderungen in der Anwendung.
- Im Grunde ein dupe von diesem, angemeldet heute früh: stackoverflow.com/questions/1452539/...
- Aber die kurze Antwort ist, haben Sie zu verwalten, Ihren eigenen Verwendung einer hash map oder so etwas.
Du musst angemeldet sein, um einen Kommentar abzugeben.
jeceuyper Recht ...
einen Seite nicht, obwohl:
DisplayObject
erstrecktEventDispatcher
, die bereits tut implementierenIEventDispatcher
... also um genauer zu sein: Sie überschreiben müssenaddEventListener
undremoveEventListener
zu verfolgen die Zuhörer ...ein paar technische details: ich schlage vor, Sie verwenden
Dictionary
zum speichern der handler-Funktionen ... ein bisschen langsamer für den Einschub, aber viel schneller für die Entfernung ... auchDictionary
unterstützt schwache Referenzen, das ist ganz wichtig bei event-handling ... Bedenken Sie auch, dassuseCapture
ermöglicht das hinzufügen der gleichen handler zweimal ...Glück dann ... 😉
back2dos hat, erwähnt die Methode, die Sie verwenden sollten, was ich Tat, war die movieclip-Klasse erweitern und Durchführung aller Arten von Funktionen, die ich täglich nutzen, sind aber nicht Teil der movieclip-Klasse. einschließlich das überschreiben der Methode addEventListener Klasse
Glenn hat Recht, es ist keine solche Sache wie eine removeAllListener oder listAllListener Methode.
Dennoch, Sie könnten Ihre custum diplayObject Umsetzung der IEventDispatcher - Schnittstelle und verfolgen alle Listener Hinzugefügt oder entfernt von Ihrem Objekt.
Das ist sozusagen ein hack, aber in einigen (vielleicht den meisten Fällen), können Sie ganz einfach das display-Objekt auf null und re-initialisieren und dann neu konfigurieren mit null visuelle Störung.
Dies hat den zusätzlichen bonus der, dass alle Ereignis-Listener.
Es sei denn, Sie tun dies, eine app, die bereits Hunderte von Zuhörern und Objekte, dann sollte es funktionieren völlig in Ordnung, so lange wie Sie tolerieren können Neukonfiguration Ihrer display-Objekt.
Natürlich, Sie sollten nicht auf etwas, das tut etwas verrücktes in den Konstruktor wie das laden von Daten.
funktioniert...
function b
ist ein anderes Objekt als das anonyme event-handler-Funktion erstellt innerhalbfunction a
. Daher dieremoveEventListener
Anruf fehl.