2009-09-21 5 views
9

Y at-il un moyen d'obtenir une liste d'auditeurs enregistrés pour un EventDispatcher?Flash AS3 EventDispatcher - un moyen d'obtenir une liste d'auditeurs enregistrés?

Je sais que EventDispatcher a la méthode hasEventListener pour vous dire si des écouteurs sont enregistrés, mais est-il un moyen facile d'interroger le EventDispatcher pour savoir ce que les auditeurs sont? Une façon dont j'ai pensé faire était de sous-classer EventDispatcher pour remplacer la méthode addEventListener et de stocker les écouteurs dans un dictionnaire, mais cela me semble maladroit.

Des idées?

+0

J'ai longtemps rêvé de quelque chose d'aussi probable, mais la solution que vous avez mentionnée semble être la seule à ce jour ... –

Répondre

3

Ok, il semble qu'il y ait pas de réponse à cette question autre que mon idée originale de stocker les auditeurs dans un dictionnaire et de les supprimer explicitement. Oh bien ...

Quelques considérations intéressantes sur le intricacies AS3 Events system can be found here.

1

Il ne ressemble pas à cela est une solution complète, mais il pourrait vous aider sur votre chemin:

http://www.rialvalue.com/blog/2009/09/08/does-an-eventdispatcher-have-subscribed-listeners/

de l'article:

L'exemple ci-dessus montre comment nous pouvons obtenir une référence aux différents écouteurs déclarés dans un EventDispatcher et comment de les supprimer sans avoir une référence directe (et connaissant le nom de l'événement arggg).

Même si cela peut vous aider à savoir si un EventDispatcher auditeurs ou non sont encore plusieurs problèmes que vous pourriez trouver:

* You don’t have any information about the listener 
* You don’t know which event the listener is listening to 
* We don’t know which phase the listener is listening to 
* Haven’t done too much testing around this, but I think both weak and strong references are hold in the list 
* The other thing to consider is that flash.sampler.getMemberNames only works in the debugger version of the Flash Player 
+1

Cela a été utile, mais cela ne résout pas vraiment mon problème - si cela ne fonctionne que dans le version débogueur du lecteur je ne peux pas l'utiliser pour des applications du monde réel ... – Reuben