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

Вернуться   Форум Flasher.ru > Блоги > f.g.programmer

Оценить эту запись

Event

Запись от f.g.programmer размещена 16.10.2010 в 17:26
Обновил(-а) f.g.programmer 27.10.2010 в 01:34

Решил немного переписать статью

Что такое событие - это экземпляр класса Event, это сигнал о том, что где-то что-то произошло, это брошенный объект, ищющий кто-бы его поймал и обработал.
Код AS3:
// создание
var e:Event = new Event(“some_event”);
// бросание
dispatchEvent(e);
Обработчики событий - это колбеки, функции обратного вызова имеющие один единственный параметр - событие, это те кто ловит и обрабатывает события.
Код AS3:
// добавление обработчика
addEvenListener(“some_event”, someEventHandler);
// обработчик
function someEventHandler(e:Event) {
    //...
}

Конструктор события имеет три параметра: обязательный - type (строковый идентификатор), и два необязательных - bubbles и cancelable. Комбинированием последних двух параметров можно получить 4 вида довольно сильно различающихся по поведению событий.

1. Простое событие
bubbles = false, cancelable=false

Это пожалуй самый распространённый вид событий, события сигнализирующие о чем-то произошедшем в конкретном объекте, и иногда передающие дополнительные параметры.

В случае, когда достаточно одного слушателя и событие должно перестать прослушиваться после первого появления, такие события часто удобно заменять на непосредственные обработчики - колбек-функции с произвольным набором параметров.

2. Всплывающее событие
bubbles = true, cancelable=false
Это событие работающее только с отображаемыми объектами.
Сначала оно ищет обработчики с параметром useCapture=true во всех родителях, начиная от корневого и до родителя объекта-бросателя (Фаза захвата), потом в объекте-бросателе (Фаза цели), и затем обработчики с параметром useCapture=false во всех родителях, начиная от родителя объекта-бросателя и до корневого(Фаза всплытия).

Хотя этот вид события и работает только с отображаемыми объектами, довольно просто реализовать интерфейс IEventDispatcher так, чтобы всплытия работали и с самописными компоновщиками.

3. Событие с возможностью отмены обработки по умолчанию
bubbles = false, cancelable=true
Если один из обработчиков вызывает prevenDefault(), то обработка по умолчанию не выполняется
Используется, когда мы хотим иметь некоторое поведение, которое можно будет отменить извне.

Например некоторый модуль, который ведёт себя самодостаточно, но и бросает события наружу, чтобы мы могли дополнить или отменить поведение по умолчанию.
Выглядеть это будет примерно так:

Код AS3:
private function generateSameEvent():vois {
    // бросаем событие для обработки извне
    var was_prevent_default:Boolean = dispatchEvent(new Event("same_event", false, true));
    // если внешние обработчики не отменили обработку по умолчанию
    if (!was_prevent_default) {
        // делаем внутренюю обработку
        runDefaultSameEventHandler();
    }
}
Возможно, для ненативных отменяемых событий также имеет смысл добавлять возможность непосредственного вызова поведения по умолчанию, для возобновления работы модуля (например отмена события PLAY и возобновление работы после отмены).


4. Отменяемое всплывающее событие
bubbles = true, cancelable=true
Сочетают в себе поведение двух предыдущих видов событий.
Всего комментариев 0

Комментарии

 
Последние записи от f.g.programmer

 


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


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