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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.12.2012, 13:38
see613 вне форума Посмотреть профиль Отправить личное сообщение для see613 Найти все сообщения от see613
  № 1  
Ответить с цитированием
see613

Регистрация: Oct 2012
Сообщений: 3
Question Event manager

Я хочу переопределить стандартный метод EventDispatcher.addEventListener. В новом методе должен вызываться мой служебный класс EventManager.addEvent(). И в методе EventManager.addEvent() кроме всего прочего должен также вызваться стандартный метод addEventListener. И вот я не знаю как вызвать именно стандартный, а не мой новый addEventListener. Надеюсь понятно объяснил.

Подробнее:

У меня есть EventManager с таким методом:


Код AS3:
public function addEvent(obj:IEventDispatcher, event:String, listener:Function, 
      useCapture:Boolean = false, priority:int = 0, 
      useWeakReference:Boolean = false):void 
{           
  obj.addEventListener(event, listener, useCapture, priority, useWeakReference);
  [здесь я сую слушатель события в свой стек]    
}

Хочу сделать код по принципу:


Код AS3:
public class CustomClass extends Sprite
{    
   public override function addEventListener(type:String, listener:Function, 
          useCapture:Boolean = false, priority:int = 0, 
          useWeakReference:Boolean = false):void
   {
       eventManager.addEvent(this, type, listener, useCapture, priority, useWeakReference);            
   }    
}

но в результате цепочка вызовов:


Код AS3:
customClass.addEventListener ->
 
  eventManager.addEvent ->
 
  customClass.addEventListener ->
 
  eventManager.addEvent ->
 
  customClass.addEventListener ->
 
  ...
и так до бесконечности... потому что метод eventManager.addEvent также вызывает метод obj.addEventListener

Может кто-то сможет направить на правильный путь?


Последний раз редактировалось see613; 13.12.2012 в 14:08.
Старый 13.12.2012, 14:02
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 2  
Ответить с цитированием
AlexLucas
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Вам EventManager нужен только для логирования ?

Старый 13.12.2012, 14:23
see613 вне форума Посмотреть профиль Отправить личное сообщение для see613 Найти все сообщения от see613
  № 3  
Ответить с цитированием
see613

Регистрация: Oct 2012
Сообщений: 3
он нужен не только для логирования. В нем хранятся слушатели. Чтобы можно было разом удалять все слушатели определенного объекта и тд. Подсмотрел в библиотеке spas http://www.flashapi.org

Также не хочется добавлять новых методов. В том то и суть чтобы на любые классы(мои или стандартные) вызывать один и тот же метод addEventListener не задумываясь где переопределенный метод а где нет. То есть простое удобство.

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

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
У CustomClass можно не переписывать метод, а добавить.... что-нить вроде addEventListenerWithLogging, собственно в нём и будет происходить eventManager.addEvent

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
EventManager
Код AS3:
public function addEvent(obj:IEventDispatcher, event:String, listener:Function, 
      useCapture:Boolean = false, priority:int = 0, 
      useWeakReference:Boolean = false):void 
{
  [здесь я сую слушатель события в свой стек]    
}
Код AS3:
public class CustomClass extends Sprite
{    
   public override function addEventListener(type:String, listener:Function, 
          useCapture:Boolean = false, priority:int = 0, 
          useWeakReference:Boolean = false):void
   {
       eventManager.addEvent(this, type, listener, useCapture, priority, useWeakReference);
       super.addEventListener(this, type, listener, useCapture, priority, useWeakReference);            
   }    
}
__________________
משיח לא בא
משיח גם לא מטלפן

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Создать финальный метод, который будет дёргать super.addEventListener. Скрыть неймспейсами, чтобы при обычной работе было красивше. А ещё лучше послушать alatar'a.

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

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

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


 


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


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