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

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

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

Регистрация: Nov 2009
Сообщений: 425
По умолчанию один прёмник для 2х типов событий

Собственно как описать один приёмник для двух событий разных типов, не исключая при этом типизацию данных и не описывая некую вспомогательную функцию, которая бы вызывалась в обоих приемниках (второе не нравится лишней писаниной)?
Код AS3:
addEventListener(MouseEvent.MOUSE_OVER, someFunction);
addEventListener(FocusEvent.FOCUS_IN, someFunction);
.....
private function someFunction(e:*):void {
     .....
}
.....

Старый 26.10.2010, 10:01
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 2  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Код AS3:
private function someFunction(e:Event):void {...

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

Регистрация: Nov 2009
Сообщений: 425
Цитата:
Сообщение от f.g.programmer Посмотреть сообщение
Код AS3:
private function someFunction(e:Event):void {...
т.е. я правильно понял: Event является суперклассом для MouseEvent и FocusEvent и поэтому такое объявление типа данных событийного объекта будет справедливым? =)
или всё же каша у меня в голове сейчас?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Все события наследуюся от Event.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Сообщение от Contemplator Посмотреть сообщение
т.е. я правильно понял: Event является суперклассом для MouseEvent и FocusEvent и поэтому такое объявление типа данных событийного объекта будет справедливым? =)
или всё же каша у меня в голове сейчас?
Каши нет, всё верно.

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

Регистрация: Nov 2009
Сообщений: 425
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Каши нет, всё верно.
хмм... резонный вопрос назрел: в каких случаях тогда следует указывать явный тип данных, соответствующий конкретному событию? или это из серии: глянул в код через полгода-год и понял к какому именно событию относится данный приёмник и где искать слушатель?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
в каких случаях тогда следует указывать явный тип данных
Во всех, где возможно. В вашем случае прийдется приводить событие к конкретному типу (предварительно проверив какое событие пришло), если понадобится обратиться к свойствам MouseEvent или FocusEvent.

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

Регистрация: Nov 2009
Сообщений: 425
Цитата:
Сообщение от alatar Посмотреть сообщение
Во всех, где возможно. В вашем случае прийдется приводить событие к конкретному типу (предварительно проверив какое событие пришло), если понадобится обратиться к свойствам MouseEvent или FocusEvent.
т.е. иными словами если в приёмнике нет необходимости в получении информации, касающейся произошедшего события, и приёмник один для нескольких событий - типом данных событийного объекта объявляем Event. В противном случае, применимо к вышеописанному коду следовало писать что-то вроде:
Код AS3:
private function someFunction(e:Event):void {
          if(e is MouseEvent){
          MouseEvent(e);
          /*обращаемся к переменным и свойствам MouseEvent*/
          } else {
          FocusEvent(e);
          /*обращаемся к переменным и свойствам FocusEvent*/
          }
}
или как-то иначе производиться должны проверка реального типа данных события и его приведения к нему?

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Можно еще так:
Код AS3:
var mouseEvent:MouseEvent = e as MouseEvent;
if (mouseEvent != null)
{
   ...
}
var focusEvent:FocusEvent = e as FocusEvent
if (focusEvent != null)
{
   ...
}
Но суть от этого не меняется.
Однако, я бы не стал делать один приемник на несколько событий, а потом лепить там свичи и всяческие ифы - это ООП наоборот получается.

Если есть одинаковый код в 2-х обработчиках - сделайте по-человечески - вынесите его в метод и вызывайте в этих обработчиках метод

Подписка одного обработчика на 2 события оправдана только если внутри него нет приведений типов, т.е. НЕ рассматриваются данные, пришедшие в e:Event (специфические для конкретных типов событий) вообще.


Последний раз редактировалось expl; 26.10.2010 в 23:08.
Старый 26.10.2010, 23:17
Contemplator вне форума Посмотреть профиль Отправить личное сообщение для Contemplator Найти все сообщения от Contemplator
  № 10  
Ответить с цитированием
Contemplator
 
Аватар для Contemplator

Регистрация: Nov 2009
Сообщений: 425
Цитата:
Сообщение от expl Посмотреть сообщение
т.е. НЕ рассматриваются данные, пришедшие в e:Event (специфические для конкретных типов событий) вообще.
ну как бы да, - изначально смысл был в этом (при наведении мыши или получением фокуса - просто изменить графическое содержимое), - дальше уже пошёл чисто академический интерес

всем спасибо за помощь

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

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

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


 


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


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