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

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

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

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 175
Отправить сообщение для 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. Причина: добавил пример скрипта
Старый 18.05.2020, 11:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,439
Экземпляр Moderation находится в DisplayList?
__________________
Reality.getBounds(this);

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

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 175
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Wolsh, добавил в вопросе пример скрипта для наглядности. Почему в классе Main не отлавливается событие?
__________________
кто не отвечает, того garbage collector забирает

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

Регистрация: Jan 2012
Сообщений: 834
Смею предположить, что у тебя List в Main и List в Window, это два разных объекта. List из main, ничего не знает о list из Window, который вызывает add и ловит событие.

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

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

В целом разобрался. Решил сделать так: при инициализации приложения в модели, где хранятся все данные в статических переменных, создать объект класса List. И везде, где нужно подписаться на его события, создаю экземпляр List ссылающийся на List из модели. Все работает
__________________
кто не отвечает, того garbage collector забирает


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

Теги
события
Опции темы
Опции просмотра

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

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


 


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


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