2010-06-02 7 views
2

J'ai un petit problème, je ne comprends pas vraiment si je peux utiliser addEventListener plus d'une fois sur le même objet (et la même fonction de rappel) si ce cas peut avoir un problème de trop-plein, ou flex est simple si intelligent pour ne pas ajouter de nouveau dans la même pile même fonctionActionScript-3 appelant addEventListener plus d'une fois

des exemples:

var t:CServiceObj = _rModel.userGetBoardJoined(); 
t.addEventListener(EDataService.DATA_AVAILABLE,onDataOk); 
t.addEventListener(EDataService.DATA_AVAILABLE,onDataOk); 
t.addEventListener(EDataService.DATA_AVAILABLE,onDataOk); 
+0

Je n'ai pu obtenir aucune information - et je n'ai pas accès au compilateur maintenant; pourquoi ne pas l'essayer avec un simple bouton et voir si click-handler est appelé plus d'une fois .. – Amarghosh

Répondre

1

Comme vous le dites, Flex est « intelligent » et même si vous vous abonnez à un Si l'événement se répète plus d'une fois sur la même instance, le gestionnaire sera appelé une seule fois (quel que soit le nombre d'addEventListener que vous passez).

+0

Pouvez-vous poster un lien vers des documents qui supporte cela? Et btw, c'est à moins que vous n'utilisiez des valeurs différentes pour 'useCapture' http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/EventDispatcher.html#addEventListener%28%29 – Amarghosh

1

J'ai essayé un test rapide sur Button et peu importe si addEventListener est ajouté plusieurs fois à la même fonction - il est envoyé une fois.

Cependant, vous pouvez configurer quelque chose comme ça

t.addEventListener(EDataService.DATA_AVAILABLE,onDataOk); 
t.addEventListener(EDataService.DATA_AVAILABLE,onDataOk2); 

où onDataOk2 appelle onDataOk avec le paramètre d'événement.

Note intéressante Un autre test, j'ai ajouté un gestionnaire de clic dans la balise MXML, et un gestionnaire de clic dans l'AS, les deux ont souligné la même fonction. Lorsque le bouton a été cliqué, les deux gestionnaires se sont dépêchés, donc Flex a fait quelque chose dans les coulisses pour accueillir cette fonctionnalité.