Главная / Action Script 3
Пакетflash.events
Интерфейс public interface IEventDispatcher
Средство реализации EventDispatcher

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Интерфейс IEventDispatcher определяет методы добавления и удаления прослушивателей событий, проверяет, зарегистрированы ли определенные типы прослушивателей событий и отправляет события.

Цели событий являются важным компонентом модели событий в Flash® Player. Цель события является основным фактором, определяющим прохождение потока событий по иерархии списка отображения. Когда происходит такое событие, как щелчок мыши или нажатие клавиши, Flash Player отправляет объект Event в поток событий из корня списка отображения Объект Event проходит путь к цели события и обратно, разделенный на три фазы: фаза захвата от корня к последнему узлу перед целевым узлом события; фаза цели включает только целевой узел события; а фаза пузырей включает все последующие узлы на пути обратно к корневому узлу списка отображения.

Как правило, чтобы дать определенному пользователем классу возможность отправлять события, проще всего расширить класс EventDispatcher. Если это невозможно (например, если класс уже расширяет другой класс), можно внедрить интерфейс IEventDispatcher, создайте элемент EventDispatcher и создайте простые процедуры для направления вызовов в собранный EventDispatcher.

Посмотреть примеры



Общедоступные методы
 МетодОпределено
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события в объекте EventDispatcher, в результате чего прослушиватель будет получать уведомления о событиях.
IEventDispatcher
  
Передает событие в поток событий.
IEventDispatcher
  
Проверяет наличие у объекта EventDispatcher прослушивателей событий, которые зарегистрированы для получения уведомлений о событиях определенного типа.
IEventDispatcher
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Удаляет прослушиватель из объекта EventDispatcher.
IEventDispatcher
  
Проверяет, зарегистрирован ли прослушиватель событий в объекте EventDispatcher или в любом из его предков для получения уведомлений о событиях определенного типа.
IEventDispatcher
Сведения о методе
addEventListener()метод
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Регистрирует объект прослушивателя события в объекте EventDispatcher, в результате чего прослушиватель будет получать уведомления о событиях. Регистрировать прослушиватели событий можно во всех узлах списка отображения для определенного типа события, фазы и приоритета.

После успешной регистрации прослушивателя событий нельзя изменить его приоритет путем дополнительных вызовов метода addEventListener(). Чтобы изменить приоритет прослушивателя, необходимо сначала вызвать метод removeEventListener(). Затем можно зарегистрировать прослушиватель еще раз с новым уровнем приоритета.

После регистрации прослушивателя последующие вызовы метода addEventListener() с другим значением свойства type или useCapture приводят к регистрации другого прослушивателя. Например, если сначала был зарегистрирован прослушиватель со свойством useCapture в значении true, он прослушивает события только в фазе захвата. Если вызвать метод addEventListener() еще раз с тем же объектом прослушивателя, но со свойством useCapture в значении false, то будет два прослушивателя: один — прослушивающий в фазе захвата, а другой — в фазах цели и пузырей.

Нельзя зарегистрировать прослушиватель событий только для фазы цели или только для фазы пузырей. Эти фазы объединяются при регистрации, так как фаза пузырей применяется только к предкам целевого узла.

Когда прослушиватель событий больше не нужен, его можно удалить, вызвав метод EventDispatcher.removeEventListener(); в противном случае могут возникнуть проблемы с памятью. Объекты с зарегистрированным прослушивателями событий не очищаются из памяти автоматически, так как сборщик мусора не удаляет объекты, на которые есть ссылки.

Копирование экземпляра EventDispatcher не приведет к копированию всех присоединенных к нему прослушивателей событий. (Если для вновь созданного узла требуется прослушиватель событий, его необходимо добавить после создания узла.) Однако если экземпляр EventDispatcher перемещается, все зарегистрированные для него прослушиватели событий перемещаются вместе с ним.

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

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

Параметры

type:String — Тип события.
 
listener:Function — Функция прослушивателя, обрабатывающая событие. Эта функция должна принимать объект Event в качестве единственного параметра и не должна что-либо возвращать, как показано в примере:

function(evt:Event):void

У функции может быть любое имя.
 
useCapture:Boolean (default = false) — Определяет, работает ли прослушиватель в фазе захвата или в фазах цели и пузырей. Если useCapture имеет значение true, прослушиватель обрабатывает событие только в фазе захвата, а в фазе цели и пузырей — нет. Если useCapture имеет значение false, прослушиватель обрабатывает событие только в фазе цели или пузырей. Чтобы прослушивать событие во всех трех фазах, необходимо вызвать addEventListener() дважды: один раз с useCapture в значении true, а другой — с useCapture в значении false.
 
priority:int (default = 0) — Уровень приоритета прослушивателя событий. Приоритеты обозначаются 32-разрядными целыми числами. Чем больше число, тем выше приоритет. Все прослушиватели событий с приоритетом n обрабатываются перед прослушивателями с приоритетом n-1. Если у двух или более прослушивателей одинаковый приоритет, они обрабатываются в порядке добавления. Значение приоритета по умолчанию равно 0.
 
useWeakReference:Boolean (default = false) — Определяет сильную или слабую степень ссылки на прослушиватель. Сильная ссылка (по умолчанию) запрещает прослушивателю выполнять сборку мусора. Слабая ссылка не препятствует этому.

Функции элементов на уровне класса не подвергаются очистке, поэтому useWeakReference может иметь значение true для функций элементов на уровне класса, не опасаясь их очистки. Если задать для useWeakReference значение true для прослушивателя, который является вложенной внутренней функцией, то он будет очищен и перестанет быть постоянным. Если создаются ссылки на внутреннюю функцию (путем ее сохранения в другой переменной), то она не будет очищаться и останется постоянной.

dispatchEvent()метод 
public function dispatchEvent(event:Event):Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Передает событие в поток событий. Целью события является объект EventDispatcher, для которого вызывается метод dispatchEvent().

Параметры

event:Event — Объект Event, отправляемый в поток событий.

Возвращает
Boolean — Значение true, если для события не вызван метод preventDefault(), в этом случае возвращается значение false.
hasEventListener()метод 
public function hasEventListener(type:String):Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Проверяет наличие у объекта EventDispatcher прослушивателей событий, которые зарегистрированы для получения уведомлений о событиях определенного типа. Это позволяет определить, где объект EventDispatcher изменил обработку типа события в иерархии потока событий. Чтобы определить, будет ли на самом деле определенный тип событий запускать прослушиватель событий, используйте метод IEventDispatcher.willTrigger().

Разница между hasEventListener() и willTrigger() заключается в том, что hasEventListener() просматривает только тот объект, которому принадлежит, а willTrigger() просматривает весь поток событий для события, указанного в параметре type.

Параметры

type:String — Тип события.

Возвращает
Boolean — Значение true, если прослушиватель заданного типа зарегистрирован; false, если нет.

См. также

removeEventListener()метод 
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Удаляет прослушиватель из объекта EventDispatcher. Если для объекта EventDispatcher нет зарегистрированного прослушивателя, то вызов этого метода игнорируется.

Параметры

type:String — Тип события.
 
listener:Function — Удаляемый объект прослушивателя.
 
useCapture:Boolean (default = false) — Указывает, зарегистрирован ли прослушиватель для фазы захвата либо для фаз цели и пузырей. Если прослушиватель зарегистрирован и для фазы захвата и для фаз цели и пузырей, метод removeEventListener() необходимо вызвать дважды: один раз со свойством useCapture в значении true, а другой раз со свойством useCapture в значении false.

willTrigger()метод 
public function willTrigger(type:String):Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Проверяет, зарегистрирован ли прослушиватель событий в объекте EventDispatcher или в любом из его предков для получения уведомлений о событиях определенного типа. Этот метод возвращает значение true, если прослушиватель событий запускается в любой фазе потока событий, когда событие заданного типа отправляется данному объекту EventDispatcher или его потомкам.

Разница между hasEventListener() и willTrigger() заключается в том, что hasEventListener() просматривает только тот объект, которому принадлежит, а willTrigger() просматривает весь поток событий для события, указанного в параметре type.

Параметры

type:String — Тип события.

Возвращает
Boolean — Значение true, если прослушиватель заданного типа будет запущен; false, если нет.
Примеры Как пользоваться примерами
IEventDispatcherExample.as

В следующем примере используются классы IEventDispatcherExample и DecoratedDispatcher, чтобы продемонстрировать реализацию и использование класса IEventDispatcher. Для этого каждый метод DecoratedDispatcher реализуется так же, как и в EventDispatcher. В конструкторе IEventDispatcherExample создается новый экземпляр класса DecoratedDispatcher (с именем decorDispatcher), затем с помощью переменной decorDispatcher вызывается метод addEventListener() с пользовательским событием doSomething, которое затем обрабатывается методом didSomething(), распечатывающим строку текста с помощью trace().
 
package {
        import flash.events.Event;
        import flash.display.Sprite;
       
        public class IEventDispatcherExample extends Sprite {
                public function IEventDispatcherExample() {
                        var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher();
                        decorDispatcher.addEventListener("doSomething", didSomething);
                        decorDispatcher.dispatchEvent(new Event("doSomething"));
                }
               
                public function didSomething(evt:Event):void {
                        trace(">> didSomething");
                }
        }
}

import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
import flash.events.Event;
               
class DecoratedDispatcher implements IEventDispatcher {       
    private var dispatcher:EventDispatcher;
               
    public function DecoratedDispatcher() {
        dispatcher = new EventDispatcher(this);
    }
           
    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
        dispatcher.addEventListener(type, listener, useCapture, priority);
    }
           
    public function dispatchEvent(evt:Event):Boolean{
        return dispatcher.dispatchEvent(evt);
    }
    
    public function hasEventListener(type:String):Boolean{
        return dispatcher.hasEventListener(type);
    }
    
    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
        dispatcher.removeEventListener(type, listener, useCapture);
    }
                   
    public function willTrigger(type:String):Boolean {
        return dispatcher.willTrigger(type);
    }
}