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

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

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
По умолчанию Глобальные события, события цепочки

Всем привет.
Обсуждалось много раз, но все было что то не совсем то, что нужно =\
В общем, для начала хочу разобраться с глобальными событиями:

Например, главный класс Main:
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
	public class Main extends MovieClip
	{
		public function Main() {
			trace("I`m constructor");
			var m = new myMC();
			addChild(m);
			addEventListener("MY_EVENT", onEvent);
		}
 
		private function onEvent(e:Event):void {
			trace("Main.as -> onEvent");
		}
	}
 
}
и класс myMC (это мувиклип, лежащий в библиотеке):
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	public class myMC extends MovieClip 
	{
		public function myMC() {
			trace("I`m my MC");
			addEventListener(MouseEvent.CLICK, onClick);
			addEventListener("MY_EVENT", onEvent);
		}
 
		private function onClick(e:MouseEvent):void {
			trace("click!");
			dispatchEvent(new Event("MY_EVENT"));
		}
 
		private function onEvent(e:Event) {
			trace("onEvent -> myMC");
		}
	}
 
}
Запускаем, результат:
Код:
I`m constructor
I`m my MC
click!
onEvent -> myMC
Ага, Main не получил это событие, что в принципе логично. Подписав его под родителя
Код AS3:
parent.dispatchEvent(new Event("MY_EVENT"));
Получаю:
Код:
I`m constructor
I`m my MC
click!
Main.as -> onEvent
Событие вещал в главный класс, дети это событие не получили.
В функции dispatchEvent всего 1 параметр, значит, пузырьковость указывать надо где то в другом месте.
Единственный вариант который я вижу - это подписывать stage на события, но что то мне подсказывает, что код превратиться в быдло код.
Да и подписывать parent тоже не айс, можно тогда пользоваться кастингом, все равно ведь идет обращение к parent.
Кто что может сказать?

Старый 17.11.2008, 12:46
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 2  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Код AS3:
dispatchEvent(new Event("MY_EVENT", true));

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Черт, искал не в Event`e, а в dispatchEvent. Спасибо.
А что можешь сказать про глобальное событие? Все таки подписывать у stage?

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
А что можешь сказать про глобальное событие? Все таки подписывать у stage?
В терминах MVC, обычно view передается ссылка на контроллер, на него и подписываться.
Если принять stage за контроллер, то да.

Старый 17.11.2008, 13:32
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
mre, вьювер у контроллера не подписывается. И вообще, о нём ничего знать не должен.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Эээмм... что то я не совсем понял =\
Все таки у stage, или искать контроллер (а что это?)

Старый 17.11.2008, 14:03
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 7  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Цитата:
Сообщение от __etc Посмотреть сообщение
mre, вьювер у контроллера не подписывается. И вообще, о нём ничего знать не должен.
По логике да.
Хорошо, как быть в такой ситуации.
В контроллер пришло событие. Ему нужно сделать что-то с объектом, который во view лежит через несколько уровней вложенности child-ов.
Или view проектируется таким образом, что хранит ссылки на все объекты, которые может понадобиться изменить?

Старый 17.11.2008, 14:04
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Обрабатывать события вьюверов должен контроллер. Контроллер при этом не является визуальным объектом.

Добавлено через 1 минуту
Цитата:
Сообщение от mre Посмотреть сообщение
По логике да.
Хорошо, как быть в такой ситуации.
В контроллер пришло событие. Ему нужно сделать что-то с объектом, который во view лежит через несколько уровней вложенности child-ов.
Или view проектируется таким образом, что хранит ссылки на все объекты, которые может понадобиться изменить?
Ну, например, можно сделать рекурсивный getChildByName.

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Цитата:
Сообщение от __etc Посмотреть сообщение
Обрабатывать события вьюверов должен контроллер. Контроллер при этом не является визуальным объектом.
Тогда ссылку во вьювер все равно нужно передавать.

Цитата:
Сообщение от __etc Посмотреть сообщение
Ну, например, можно сделать рекурсивный getChildByName.
Ну да, вариант

Старый 17.11.2008, 14:25
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
mre, ссылку на вьювер контроллер конечно же получает. Вот сам вьювер ссылки на контроллер в общем случае не должен иметь.

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

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

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


 


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


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