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

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

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

Регистрация: Oct 2009
Адрес: Москва
Сообщений: 73
Отправить сообщение для .true с помощью ICQ
По умолчанию Отдельный класс под каждый Custom event?

Доброго времени суток,
необходимо обрабатывать два события для класса: onData и onError.

Нашел пример класса для отдельного экземпляра, и немного дописал под себя:

Код AS3:
package src
{
	import flash.events.Event;
 
	/**
	 * ...
	 * @author true
	 */
	public class ApiErrorEvent extends Event 
	{
		public static const CONTROL_TYPE:String = "errorControl";
		public var error:String;
 
		public function ApiErrorEvent(error:String) {
			super(CONTROL_TYPE);
			this.error = error;
		}
	}
 
}
вопрос в том, можно ли сделать две константы вместо CONTROL_TYPE:
Код AS3:
const DATA = 'onData';
const ERROR = 'onError';
чтобы совместить два класса в одном и вешать обработчики событий просто на ApiEvent.ERROR или ApiEvent.DATA?

также, возможно ли какая-то обработка в конструкторе до вызова конструктора родителя? (аля установить переменную this.data если событие onData и переменную this.error если событие onError)

видел топик на тему что тогда класс родителя может начать вести себя не так как предполагается.. но не смог вникнуть в суть. Чревато ли это чем-либо?

Добавлено через 1 минуту
P.S. также, если совместить два класса, придется вызывать метод super с одним из двух параметров (this.DATA или this.ERROR)
__________________
Если ты не часть решения, тогда ты – часть проблемы.

Старый 12.05.2011, 03:17
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. можно.
2. можно, но у вас нет в этом необходимости.
3. в super передается тип события, параметр вашего конструктора который вы назвали error (для конспирации?).

Старый 12.05.2011, 03:35
.true вне форума Посмотреть профиль Отправить личное сообщение для .true Посетить домашнюю страницу .true Найти все сообщения от .true
  № 3  
Ответить с цитированием
.true
 
Аватар для .true

Регистрация: Oct 2009
Адрес: Москва
Сообщений: 73
Отправить сообщение для .true с помощью ICQ
Спасибо за ответ,

Цитата:
Сообщение от alatar Посмотреть сообщение
1. можно.
2. можно, но у вас нет в этом необходимости.
3. в super передается тип события, параметр вашего конструктора который вы назвали error (для конспирации?).
вообще не передавать в super() константу насколько я понимаю нельзя. По крайней мере, когда я пытался задать одинаковое значение этой константе и работать с двумя евентами (у меня все еще были 2 разных класса просто с одной переменной CONTROL_TYPE = 'customEvent') компилятор ругался на это.

P.S.
По идее, можно сделать один параметр в конструкторе "data:String" и свойство data:String, в котором хранить данные, которые объект получает в конструкторе и я был бы беспредельно счастлив если бы смог бы чисто избавится от лишних классов, которые в любом случае приходится дефайнить в addEventListener с константой, но пугает метод super()
Учитывая гибкость as, чувствую что что-то упустил.
__________________
Если ты не часть решения, тогда ты – часть проблемы.

Старый 12.05.2011, 10:11
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вы можете несколько параметров в конструктор передать...
Код AS3:
public function ApiErrorEvent(type:String, error:String)
{
	super(type);
	this.error = error;
}
__________________
Hell is the possibility of sanity

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

Регистрация: Sep 2002
Сообщений: 30,787
Значение константы должно быть «controlType», а не «errorControl».

Старый 12.05.2011, 13:59
.true вне форума Посмотреть профиль Отправить личное сообщение для .true Посетить домашнюю страницу .true Найти все сообщения от .true
  № 6  
Ответить с цитированием
.true
 
Аватар для .true

Регистрация: Oct 2009
Адрес: Москва
Сообщений: 73
Отправить сообщение для .true с помощью ICQ
Спасибо. Буду приводить скрипты в порядок =)
__________________
Если ты не часть решения, тогда ты – часть проблемы.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Cудя по всему, Вы взяли мой пример из темы http://flasher.ru/forum/showthread.php?t=148963
Там совсем другой контекст, речь шла ИМЕННО о событиях с единственным типом. Будьте внимательней.
В вашем случае я бы сделал так –
Код AS3:
package  
{
	import flash.events.Event
 
	public class ApiErrorEvent extends Event 
	{
		public static const DATA:String = "apiErrorEventData";
		public static const ERROR:String = "apiErrorEventError";
		public var message:String;
 
		public function ApiErrorEvent(type:String, message:String, bubbles:Boolean=false, cancelable:Boolean=false) 
		{ 
			super(type, bubbles, cancelable);
			this.message = message;
		} 
 
		public override function clone():Event 
		{ 
			return new SizeEvent(this.type, this.message, this.bubbles, this.cancelable);
		} 
 
		public override function toString():String 
		{ 
			return formatToString("ApiErrorEvent", "type", "message", "bubbles", "cancelable", "eventPhase"); 
		}
	}
}
__________________
Reality.getBounds(this);

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

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

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Возможно, это одна из концепций, которую я еще не готов разделить)) Кроме того, разные источники так же расходятся во мнениях по этому поводу - например ФД создает значения в camelstyle, а в книгах я видел варианты где все слова из имени сливались в одну прописную строчку. Когда нет однозначности, я делаю так, как кажется логичным мне. Со временем это может измениться))
В данном случае называть тип события "data" или "error" мне кажется опасным из-за "популярности" этих выражений. Лучшим решением, чем я тут предложил, было бы назвать константы позамороченней, чтобы избежать коллизий, тогда ДА, конечно, значение должно совпадать с именем константы.
А ты мог бы обосновать, почему однозначно нужно пользоваться именем для значения? Ну так, чтоб не осталось никаких сомнений?
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2002
Сообщений: 30,787
Редакторы, в частности, FB, юзают метатег [Event], в котором тип события как раз указывается в camelStyle. При подписке на события, этот camelStyle превращается в UPPER_CASE прямиком конвертацией из name. Поэтому иное фактическое значение константы может сбить с толку как разработчика, так и некоторые фреймворки, использующие в рантайме эти метатеги и подписывающиеся на такие события.

Т. е. если у тебя SUPER_EVENT = "myCustomEventSuperEvent", а в метатеге для корректного автокомплита указано [Event(name="superEvent", type="my.custom.SuperEvent")] или не дай боже [Event(name="SUPER_EVENT", ...)], то фреймворк, юзающий этот самый метатег, подпишется не на то событие (если он не гениален и не сконвертирует в имя константы). Ещё хуже ситуация, когда в параметре name написано фактическое значение константы — фреймворк отработает на ура (если он при этом был гениален, то уже не отработает), а редактор же будет автокомплитить несуществующий SuperEvent.MY_CUSTOM_EVENT_SUPER_EVENT. Посему, дабы избежать подобных проблем, я использую чёткую связь между именами констант и их значениями, которая, кстати, прослеживается как в нативном фреймворке, так и во Flex, и во многих других.

В данной ситуации надо просто назвать событие позамороченней.

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

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

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


 


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


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