Y a-t-il un moyen de déterminer quels écouteurs d'événements sont enregistrés avec un objet d'affichage? Je souhaite supprimer tous les auditeurs d'événements d'un objet d'affichage afin que je puisse attribuer de nouvelles chances de contexte dans l'application. P>
5 Réponses :
Glenn a raison, il n'existe pas de méthode de removealllistener ou de listeCalllistener. Néanmoins, vous pouvez faire de votre CustUm DiplayObject Mettre en œuvre le iEventDisPatcher A> Interface et gardez une trace de tous les auditeurs ajoutés ou supprimés de votre objet. P>
Jeceuyper a raison ... P>
un côté non si: Quelques détails techniques: je vous suggère d'utiliser bonne chance alors ...;) p> displayObject code> s'étend
EventDispatcher code>, qui implémente déjà
ieventdispatcher code> ... pour être plus précis: vous devez Supprimer
AddeventListener CODE> et
RELEEVEREventListener CODE> Pour garder une trace des auditeurs ... p>
Dictionnaire code> pour stocker les fonctions du gestionnaire ... un peu plus lentement pour l'insertion, mais beaucoup plus rapide pour le retrait ... aussi,
Dictionnaire CODE> Soutient des références faibles, qui est assez importante dans le cas de la manipulation des événements ... Gardez également à l'esprit que
Usecapture code> permet d'ajouter le même gestionnaire deux fois ... p>
Back2DOS a mentionné l'approche que vous devriez utiliser, ce que j'ai fait était de prolonger la classe MovieClip et mis en œuvre toutes sortes de fonctions que j'utilise quotidiennement, mais ne font pas partie de la classe MovieClip. y compris le remplacement de la classe AddeventListener
... À l'exception de l'intégration de type dans la touche sans incorporer le pointeur de fonction signifie que vous ne pouvez avoir qu'un seul auditeur d'un type donné sur l'objet. Pour autoriser plusieurs auditeurs, ajoutez le pointeur de fonction d'auditeur sur l'objet Touche et définissez simplement la touche à une valeur nominale (par exemple 1).
C'est une sorte de piratage, mais dans certains (peut-être la plupart des cas), vous pouvez facilement régler l'objet d'affichage sur NULL et le réinitialiser, puis le reconfigurer avec une perturbation visuelle zéro. P>
Ceci a le bonus supplémentaire de supprimer tous les auditeurs d'événements. P>
Sauf si vous le faites dans une application qui a déjà des centaines d'auditeurs et d'objets, il devrait fonctionner parfaitement aussi longtemps que vous pouvez tolérer la reconfiguration de votre objet d'affichage. P>
Évidemment, vous ne devriez pas faire cela sur quoi que ce soit qui fait quelque chose de fou dans le constructeur, comme le chargement de données. P>
function a(){ mc.addEventListener(Event.ENTER_FRAME,function(){ ... } } function b(){ mc.removeEventListener(Event.ENTER_FRAME,function(){}); } works...
Lisez la question plus attentivement. J'ai demandé comment supprimer tous les auditeurs d'événements d'un objet.
Je ne faisais que regarder cette question pour résoudre ce problème.
Cela ne fonctionnera pas - la fonction de gestionnaire d'événements anonyme créée dans fonction B code> est un objet différent de la fonction de gestionnaire d'événements anonyme créée dans
Fonction A code>. Par conséquent, l'appel code> ReimenleventEventListener code> échouera en silence.
Fondamentalement, une dupe de celle-ci, connectée plus tôt aujourd'hui: Stackoverflow.com/questions/1452539/...
Mais la réponse courte est que vous devez gérer votre propre utilisation d'une carte de hachage ou de quelque chose.