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

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

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
По умолчанию Использование заготовленного набора событий

Всем привет! За и против такого подхода:
Код AS3:
class Events
{
         private static var _someEvent:SomeEventClass = new SomeEventClass("type", ...);
 
         public static function get someEvent():SomeEventClass
         {
                  return _someEvent.clone();
         }
}
...
dispatchEvent(Events.someEvent); //Somwhere in someTarget object;
...
...
someTarget.addEventListener(Events.someEvent.type, someListener);
...


Последний раз редактировалось Silicium; 18.02.2012 в 21:55.
Старый 18.02.2012, 22:22
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Однотипные события "1 класс = 1 типСобытия"?
Кастомные события без кастомных полей?
Ни разу не было надо.

Добавлено через 4 минуты
По сути Вы заменяете выражение new Event на Event#clone();
Посмотрите реализацию метода clone(). Там тот же самый new Event().
__________________
Reality.getBounds(this);

Старый 18.02.2012, 22:38
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 3  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Код:
По сути Вы заменяете выражение new Event на Event#clone();
Да, верно. Просто меня порой напрягает обилие строковых констант, задающих типы событий. И вообще я сначала думал без клонирования обойтись.

Добавлено через 2 минуты
Честно говоря сейчас смотрю, и сам понять не могу, че это мне взбрело в голову. Или я просто забыл)

Добавлено через 13 минут
А, вот, вспомнил. Надоело писать следующее:
Код AS3:
dispatchEvent(new SomeEventClass(SomeEventClass.SOME_EVENT_TYPE, customParams, bubbles, cancelable));
Вместо этого думал что-то покороче:
Код AS3:
dispatchEvent(Events.someEvent(customParams));
Тогда в класса Event:
Код AS3:
class Event
{
      puiblic static function someEvent(customParams:*):SomeEventClass
      {
            return new SomeEventClass("type", customParams, bubbles, cancelable);
      }
}

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Просто меня порой напрягает обилие строковых констант, задающих типы событий.
Отлично. А создавать и хранить в памяти обилие Классов событий Вас не напрягает?)))
Тут как-то давно была небольшая баталия по поводу:
HelicopterEvent.UP;
HelicopterEvent.DOWN;
HelicopterEvent.ATTACK;
против
HelicopterUpEvent;
HelicopterDownEvent;
HelicopterAttackEvent;
То есть один класс события с константами против (3...n) классов "однотипных" событий.
Моя позиция очевидна. По крайней мере, для меня ©.

Добавлено через 10 минут
Цитата:
Вместо этого думал что-то покороче
Было бы допустимо, если бы не подписка, которая требует строковый тип, и которой дела нет до класса события.
Цитата:
someTarget.addEventListener(Events.someEvent.type, someListener);
Здесь Вы вынуждены создать экземпляр события только для того, чтобы спросить его строковый тип.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 18.02.2012 в 22:55.
Старый 18.02.2012, 23:12
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 5  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Не-не-не, Вы не поняли (вернее, я не сказал). В топикстарте ахинея. Я как раз подумал про
Код:
Вместо этого думал что-то покороче:
потом, когда начал тему писать, в голове всплыло ложное это:
Код:
порой напрягает обилие строковых констант
поэтому и написал не то, что хотел А строковый тип он пусть и будет строковый тип, понятно, что в подписчик так или иначе его передавать, но вот символьную длину в аргументе диспатча использование стат. метода сокращает. По поводу 3*n классов я с Вашей точкой зрения согласен. В данном случае вопрос о создании класса под каждое событие не ставился.

Старый 18.02.2012, 23:21
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Надоело писать следующее:
Ну так все же в ваших руках.
Код AS3:
package 
{
	import flash.events.Event;
 
	public class NewEvent extends Event 
	{
		public static const TYPE:String = "NewEvent";
		public var data:*;
 
		public function NewEvent(data:*) 
		{ 
			super(TYPE, false, false);
			this.data = data;
		} 
 
		public override function clone():Event 
		{ 
			return new NewEvent(this.data);
		} 
 
		public override function toString():String 
		{ 
			return formatToString("NewEvent", "data"); 
		}
 
	}
 
}
Код AS3:
group.addEventListener(NewEvent.TYPE, newEventHandler);
Код AS3:
dispatchEvent(new NewEvent("Харасо!"));
__________________
Reality.getBounds(this);

Старый 18.02.2012, 23:32
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 7  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Э, неет) Это как раз годится, если под каждое событие свой класс, ведь тут установка типа в конструктор вшита. В моем случае под отдельный тип события отдельный метод заточен, но уж никак не класс.

Добавлено через 2 минуты
Код:
Моя позиция очевидна.
так какова Ваша позиция? Сдается мне, что я не правильно ее понял.


Последний раз редактировалось Silicium; 18.02.2012 в 23:35.
Старый 18.02.2012, 23:40
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Это радует)))
Тогда как Вам такой вариант? Боюсь на этом моя фантазия истощается.
Код AS3:
group.addEventListener(NewEvent.TYPE1, newEventHandler);
group.dispatchEvent(new NewEvent(1, "Харасо!"));
Добавлено через 3 минуты
Просто как бы Вы не крутили, нужен идентификатор типа и нужно получать строковый тип в подписке.
И как ни извращайся, строковые константы – лучшее решение. Какой бы монстр ни получался, недовольство здесь только от лени. Читабельность кода хуже, информативность – лучше. Парадокс, однако.

Добавлено через 6 минут
Цитата:
так какова Ваша позиция?
Константы, конечно. Вариант с полутипным классом был для разминки ума. Показать, что синтаксический сахар в природе существует, но сильно портит здоровье))
__________________
Reality.getBounds(this);

Старый 18.02.2012, 23:50
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 9  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Хм... задним местом чую некоторый конфликт, но не могу понять его природу. Кажется, будто из за неполноты высказываний. Так вот все мое предложение целиком:
Код AS3:
class Events
{
      public static const SOME_TYPE:String = "type 1";
      public static const SOME_OTHER_TYPE:String = "type 2";
 
      puiblic static function someEvent(customParams:*):SomeEventClass
      {
            return new SomeEventClass(SOME_TYPE, customParams, bubbles, cancelable);
      }
 
      puiblic static function someOtherEvent(customParams:*):SomeEventClass
      {
            return new SomeEventClass(SOME_OTHER_TYPE, customParams, bubbles, cancelable);
      }
}
...
o.addEventListener(Events.SOME_TYPE, someListener); //При подписки лучше, конечно, константа
...
 
dispatchEvent(Events.someEvent(params)); //А тут вот так

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

Регистрация: Sep 2002
Сообщений: 30,787
Бессмысленное усложнение кода.

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

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

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


 


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


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