![]() |
|
||||||||||
|
|||||
|
Привет всем!
У меня есть одна кнопка, но в зависимости от момента, на клик вешается один из трех, например, слушателей. Как перед присвоением нового слушателя отменить предыдущий? Так чтоб не указывать ф-цию которую он вызывает, например.
__________________
http://zenpro.blogspot.com/ |
|
|||||
|
Только делать кастомный EventDispatcher.
В нем переопределять метод addEventListener
__________________
Сам себе репортер |
|
|||||
|
А он на все слушатели в общем распространяется?
Если у меня есть еще другие кнопки с них слушатели не удалятся? А можно пример кода?
__________________
http://zenpro.blogspot.com/ |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
Можно попроще.
private var handlers:Array=[]; ... //одно место где добавляются слушатели addEventListener (SOME1, handler1); handlers.push ({"action":SOME1, "function":handler1}); addEventListener (SOME2, handler2); handlers.push ({"action":SOME2, "function":handler2}); ... ... //другое место где добавляются слушатели, но перед этом чистятся старые var cur:*; while (cur = handlers.pop()) removeEventListener (cur.action,cur.function); //добавим новые addEventListener (SOME3, handler3); handlers.push ({"action":SOME3, "function":handler3}); addEventListener (SOME4, handler4); handlers.push ({"action":SOME4, "function":handler4}); ...
__________________
мой пустой блог |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
greenhill, hasEventListener то не подойдет? |
|
|||||
|
Цитата:
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
.
|
Элегантный способ подписывания и отписывания, кмк =)
var dispatcher:IEventDispatcher = new URLLoader(); this.configureListeners(dispatcher.addEventListener); .... this.configureListeners(dispatcher.removeEventListener); /** * @private */ private function configureListeners(method:Function):void { method.call(null, IOErrorEvent.IO_ERROR, super.dispatchEvent); method.call(null, SecurityErrorEvent.SECURITY_ERROR, super.dispatchEvent); method.call(null, ProgressEvent.PROGRESS, super.dispatchEvent); method.call(null, HTTPStatusEvent.HTTP_STATUS, super.dispatchEvent); } |
|
|||||
|
Зачем так сильно заморачиваться со всеми этими слушателями? Создать переменную state:int;
И в зависимости от ситуации запускать ту или иную функцию.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Цитата:
btn.removeEventListener(MouseEvent.CLICK, func1); btn.removeEventListener(MouseEvent.CLICK, func2); btn.removeEventListener(MouseEvent.CLICK, func2); btn.addEventListener(MouseEvent.CLICK, func1); Цитата:
__________________
http://zenpro.blogspot.com/ |
|
|||||
|
.
|
// Добавление слушателей this.configureListeners(btn.addEventListener); ... // Удаление слушателей this.configureListeners(btn.removeEventListener); /** * @private */ private function configureListeners(method:Function):void { method.call(null, MouseEvent.CLICK, func1); method.call(null, MouseEvent.CLICK, func2); method.call(null, MouseEvent.CLICK, func3); } |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|