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

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

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

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
etc, поясни пожалуста.
Правильно ли я понял, что для дерева объектов входящих в модель вы реализовали
собственный механизм баблинга?

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

Регистрация: Sep 2002
Сообщений: 30,787
terbooter, да, правильно.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
etc, всегда он был интересен, как вы его реализовали. Кроме как
Код AS3:
while (parent) parent.dispatchEvent
мне ничего на ум не лезет.

Старый 11.12.2010, 22:30
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 64  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
А что в этом плохого? Я также делал.
as2 вариант:
Код AS3:
	public function dispatchEvent(event:Event):Void 
	{
 
		event.target = this;
		event.currentTarget = this;
		var i:Number = 0;
		var l:Number = _eventListeners.length;
		for (i = 0; i < l; i++)
		{
			if (event.type != _eventListeners[i].e)	continue;
			_eventListeners[i].f.apply(_eventListeners[i].o, [event.clone()]);	
		}
		dispatchBubblesEvent(event);
		delete event;
	}
 
	// всплытие событий
	public function dispatchBubblesEvent(event:Event):Void 
	{
			if (event.bubbles && this["eventParent"].dispatchEvent) 
			{			
				var bubblesEvent:Event = event.clone();
				bubblesEvent.currentTarget = this["eventParent"];
				this["eventParent"].dispatchEvent(bubblesEvent);
			}
			delete event;	
	}
может немного нелогично показаться просто в сеттерах target и currentTarget стоят проверки на "уже определённость"
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 11.12.2010 в 22:34.
Старый 11.12.2010, 23:00
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 65  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Я не говорил что это плохо.
Но информация о фазе и таргет безнадёжно теряется в случае с редиспатчем при бабблинге. Как вариант - переопределять геттеры для них и писать обёртку, но в моём жалком умишке это дело не проецируется красиво. Think костыльно.

Старый 11.12.2010, 23:43
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 66  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
всё определяется целями. костыльность - сугубо ирреалистичное понятие, я бы сказал близкое к гейзенбергову пространству. пока его не трогаешь - это не костыль. )))
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 12.12.2010 в 01:32.
Старый 12.12.2010, 00:28
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 67  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Код AS3:
this["eventParent"]
Как это получилось, что eventParent оказалось невозможным статически затипизировать?
Определяется в наследнике класса ? - но почему тогда просто не перегрузить

Котяра, ещё интересно почему надо было самому в цикле листенеры обходить а не просто вызвать super.dispatchEvent() в перегруженном методе

Просто сейчас пытаюсь свою (с немного другими целями) реализацию накатать - запнулся на том, как определить было ли вызвано stopPropagation() и ищу альтернативы.

Проехали, "as2-вариант" не увидел


Последний раз редактировалось expl; 12.12.2010 в 00:39.
Старый 12.12.2010, 01:26
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 68  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Насчёт ["eventParent"] - замануха вроде бы была, что я динамически назначал классы эвентДиспатчерами..
А чтоб FD не матерился - сделал в скобках.
Ну или что-то такое - не помню.
и это:
тигра: таргет у меня остаётся ( там в сеттере есть проверка на существование - если он уже есть - то посылаем в Кубу), а фазу я просто не реализовывал вообще - я и в ас3 её ни разу не использовал.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 12.12.2010 в 01:30.
Старый 12.12.2010, 14:04
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 69  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Ам. А если надо событие редиспатчить — именно редиспатчить с созданием клона с изменением таргета? Или тебе такая возможность не нужна совершенно?

Старый 21.12.2010, 19:48
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 70  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Решил тоже реализовать что-то подобное. Мне нужно чтобы событие от детей всплывало до "рутовой" модели.
Таким образом модель лист может не иметь ссылку на родителя.
Вот такая зарисовочка
Код AS3:
package ru.terbooter.farm.model {
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.utils.Dictionary;
	import ru.terbooter.farm.model.events.HelperEvent;
	/**
	 * ...
	 * @author terbooter.ru
	 */
	public class ModelBase extends EventDispatcher {
 
		private var dictionary:Dictionary;
 
		public function ModelBase() {
 
		}
 
		/**
		 * От каждого ребенка событие будет всплывать
		 * до рутовой модели
		 * @param	child
		 */
		protected function addChild(child:ModelBase):void {
			if (!this.dictionary) {
				this.dictionary = new Dictionary(true);
			}
 
			child.addEventListener(HelperEvent.LISTEN_TO, helperListener);
			//TODO
			this.dictionary[child] = { };
 
		}
 
		protected function removeChild(child:ModelBase):void {
			//TODO
		}
 
		/**
		 * Перед основным событием диспатчим вспомогательное,
		 * которое расскажет паренту, какой тип события слушать,
		 * чтобы передать его дальше по цепочке
		 * @param	event
		 * @return
		 */
		override public function dispatchEvent(event:Event):Boolean {
			var helper:HelperEvent = new HelperEvent(HelperEvent.LISTEN_TO);
			helper.eventToListen = event;
			super.dispatchEvent(helper);
			return super.dispatchEvent(event);
		}
 
		private function helperListener(e:HelperEvent):void {
			var dispatcher:EventDispatcher = EventDispatcher(e.target);
			dispatcher.addEventListener(e.eventToListen.type, bubbleListener);
		}
 
		private function bubbleListener(e:Event):void {
			//TODO
			this.dictionary[e.target][e.type] = 1;
			this.dispatchEvent(e);
		}
 
 
	}
 
}

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

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

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


 


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


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