Показать сообщение отдельно
Старый 17.05.2020, 15:26
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 1  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Question Общее событие

Всем привет.
Есть класс BlackList, Slide, Moderation.
Внутри Slide по нажатию на кнопку вызываю метод в BlackList, в котором диспатчится событие.
Это событие хочу ловить в этом же классе Slide и в Moderation для дальнейшей обработки. Для этого в Slide и в Moderation создан экземпляр класса BlackList со слушателями.

Почему событие может не ловиться внутри Moderation? (догадки пока, что в каждом созданном экземпляре BlackList события независимы друг от друга..)

Для наглядности набросал пример:

Главный класс Main
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite
	{
		private var _window:Window;
		private var _list:List;
 
		public function Main()
		{
			_window = new Window();
			addChild(_window);
 
			_list = new List();
			_list.addEventListener(List.CHANGE, onChangeList);
		}
 
		private function onChangeList(event:Event):void
		{
			trace('Main > LIST CHANGED'); // этот обработчик события не срабатывает
		}
	}
}
Дочерний класс Window, который вложен в Main
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Window extends Sprite
	{
		private var _btn:Sprite;
		private var _list:List;
 
		public function Window()
		{
			_btn = new Sprite();
			_btn.graphics.beginFill(0x0000FF);
			_btn.graphics.drawRect(0,0,50,50);
			_btn.graphics.endFill();
			_btn.x = _btn.y = 20;
			addChild(_btn);
 
			_btn.addEventListener(MouseEvent.CLICK, onClickBtn);
 
			_list = new List();
			_list.addEventListener(List.CHANGE, onChangeList);
		}
 
		private function onClickBtn(event:MouseEvent):void
		{
			_list.add();
		}
 
		private function onChangeList(event:Event):void
		{
			trace('Window > LIST CHANGED'); // здесь срабатывает
		}
	}
}

И класс List, который генерит событие при нажатии на кнопку внутри Window
Код AS3:
package
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
 
	public class List extends EventDispatcher
	{
		public static const CHANGE:String = 'change';
 
		public function List()
		{
 
		}
 
		public function add():void {
			dispatchEvent(new Event(CHANGE));
		}
	}
}
Почему не получается поймать событие в главном классе Main ?? Потому что событие закреплено на уровне каждого экземпляра, а не на уровне класса List?
__________________
кто не отвечает, того garbage collector забирает


Последний раз редактировалось djken; 18.05.2020 в 18:51. Причина: добавил пример скрипта