2010-06-23 4 views
3

J'ai une application en flex, elle a quelques composants prêts à l'emploi et un bon nombre de composants et d'événements personnalisés. Je veux obtenir tous les écouteurs d'événements sur un composant spécifique en cours d'exécution, je sais comment le faire avec un patch de singe, mais je ne veux pas utiliser un patch de singe et je ne peux pas m'en servir en production.Obtenir tous les écouteurs d'événement sur un composant spécifique

Est-il possible?

Répondre

2

Le EventDispatcher a une interface publique assez mince:

  • addEventListener
  • dispatchEvent
  • hasEventListener
  • removeEventListener
  • willTrigger

Cela signifie que la liste des écouteurs n'est pas exposée. Vous pouvez seulement dire s'il y a au moins un écouteur d'événement pour un type particulier d'événement.

Je voudrais réexaminer pourquoi vous devez faire ce que vous voulez faire. Dans un Observer Pattern typique, la liste des écouteurs n'est pas destinée à être exposée. J'ai un fort sentiment si vous essayez d'obtenir cette liste, alors vous approchez d'un problème de niveau supérieur de la mauvaise direction.

+0

+1. Habituellement, lorsque cette question est posée, le problème de niveau supérieur est juste une fuite de mémoire due à des gestionnaires non supprimés. :) – back2dos

+0

@ back2dos peut-être que c'est habituellement le cas je peux vous promettre que ce n'est pas dans mon cas. J'essaie d'accéder à une application compilée via un SWFLoader et d'obtenir tous les écouteurs d'événements sur un objet spécifique. le concept est de construire un peu un cadre de test. @James EventDispatcher ne m'aide pas quoi que ce soit. Merci – KensoDev

2

Vous ne pouvez pas. Vous pouvez simplement utiliser des composants personnalisés uniquement et remplacer addEventListener pour rassembler les informations. Je ne vois pas vraiment pourquoi le patch ne fonctionnerait pas. Flex est puissant dans les fonctionnalités mais de conception médiocre et je suppose que vous devrez simplement vivre avec ça.

+0

La demande ne concerne pas le patch singe, le concept de l'application est une application qui consomme une autre application via SWFLoader et qui affiche des données à son sujet. quelque chose comme FxSpy seulement J'ai aussi besoin de la partie événements. – KensoDev

+0

@KensoDev: dans ce cas, votre seule option est de modifier l'application avant qu'elle ne soit chargée pour fournir les hooks nécessaires pour collecter les informations dont vous avez besoin. Cela peut être fait sur l'AVM2 en chargeant le swf dans un ByteArray, en le modifiant, puis en le chargeant dans un chargeur. Ou vous attendez jusqu'à ce que AVM2 prenne en charge AOP avec le tissage à l'exécution/au démarrage. – back2dos

Questions connexes