Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.12.2010, 20:55
greenhill вне форума Посмотреть профиль Отправить личное сообщение для greenhill Посетить домашнюю страницу greenhill Найти все сообщения от greenhill
  № 1  
Ответить с цитированием
greenhill
 
Аватар для greenhill

Регистрация: Mar 2009
Сообщений: 281
Отправить сообщение для greenhill с помощью ICQ
По умолчанию Удаление нескольких слушателей

Привет всем!
У меня есть одна кнопка, но в зависимости от момента, на клик вешается один из трех, например, слушателей.
Как перед присвоением нового слушателя отменить предыдущий? Так чтоб не указывать ф-цию которую он вызывает, например.
__________________
http://zenpro.blogspot.com/

Старый 29.12.2010, 20:58
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 2  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Только делать кастомный EventDispatcher.
В нем переопределять метод addEventListener

Старый 29.12.2010, 21:02
greenhill вне форума Посмотреть профиль Отправить личное сообщение для greenhill Посетить домашнюю страницу greenhill Найти все сообщения от greenhill
  № 3  
Ответить с цитированием
greenhill
 
Аватар для greenhill

Регистрация: Mar 2009
Сообщений: 281
Отправить сообщение для greenhill с помощью ICQ
А он на все слушатели в общем распространяется?
Если у меня есть еще другие кнопки с них слушатели не удалятся?
А можно пример кода?
__________________
http://zenpro.blogspot.com/

Старый 29.12.2010, 21:19
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 4  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Можно попроще.
Код AS3:
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});
...
__________________
мой пустой блог

Старый 29.12.2010, 22:57
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 5  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от terbooter Посмотреть сообщение
Только делать кастомный EventDispatcher.
В нем переопределять метод addEventListener
Ну вы загнули.

greenhill, hasEventListener то не подойдет?

Старый 29.12.2010, 23:07
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Как перед присвоением нового слушателя отменить предыдущий? Так чтоб не указывать ф-цию которую он вызывает, например.
Я бы не заморачивался и удалил все 3.

Старый 30.12.2010, 00:57
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Элегантный способ подписывания и отписывания, кмк =)

Код AS3:
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);
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 30.12.2010, 02:22
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 8  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Зачем так сильно заморачиваться со всеми этими слушателями? Создать переменную state:int;
И в зависимости от ситуации запускать ту или иную функцию.
Код AS3:
if(state==0){...
if(state==1){...
if(state==2){...
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 30.12.2010, 13:40
greenhill вне форума Посмотреть профиль Отправить личное сообщение для greenhill Посетить домашнюю страницу greenhill Найти все сообщения от greenhill
  № 9  
Ответить с цитированием
greenhill
 
Аватар для greenhill

Регистрация: Mar 2009
Сообщений: 281
Отправить сообщение для greenhill с помощью ICQ
Цитата:
Я бы не заморачивался и удалил все 3.
Код AS3:
btn.removeEventListener(MouseEvent.CLICK, func1);
btn.removeEventListener(MouseEvent.CLICK, func2);
btn.removeEventListener(MouseEvent.CLICK, func2);
 
btn.addEventListener(MouseEvent.CLICK, func1);
вот так?

Цитата:
Элегантный способ подписывания и отписывания, кмк =)
Не совсем понимаю как это в своем случае написать..
__________________
http://zenpro.blogspot.com/

Старый 30.12.2010, 13:51
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
// Добавление слушателей
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);
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:19.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.