повторить количество слушателей событий? - PullRequest
4 голосов
/ 10 июля 2009

В as3, если я добавлю идентичные слушатели событий к объекту, например

txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );

мне нужно удалить этого слушателя дважды?

Как получить список или количество прослушивателей событий на объекте?

Ответы [ 2 ]

7 голосов
/ 10 июля 2009

Нет, вам не нужно дважды удалять слушателя в этой ситуации.

Вам необходимо удалить несколько слушателей в двух ситуациях:

  1. если вы добавите двух прослушивателей событий с разными функциями прослушивателей:

    txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
    txtField.addEventlistener( Event.CHANGE, changeCb2, false, 0, true );

  1. если вы установили одно событие на этапе захвата:

    txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
    txtField.addEventlistener( Event.CHANGE, changeCb, true, 0, true );

Так что вам нужно только удалить события, которые зарегистрированы по-разному друг от друга.

Вы не можете получить число прослушивателей событий с тем, что предоставляется из коробки во Flex, но вы можете проверить, есть ли у него прослушиватель событий для определенного типа события, используя hasEventListener(type).

Однако, поскольку исходный код, если он предоставляется, вы можете «Monkey patch» UIComponent или класс FlexSprite, чтобы добавить эту функциональность, как описано в этом блоге . На самом деле, вам даже не нужно это делать. Код приведен в примере. Довольно круто.

2 голосов
/ 10 июля 2009

Нет, вам не нужно удалять дважды. Вы бы только создать одну регистрацию. Кроме того, вы используете слабые ссылки (установив последний параметр, используйтеWeakReferences в true). Так что об этом еще проще рассуждать.

В документации есть раздел, в котором описаны случаи, когда вы создаете две регистрации слушателей для одной и той же функции слушателя.

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/EventDispatcher.html#addEventListener()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...