Лого Флэша Потрошителя
 
Новости · Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Идеальный клип · Что делать  
ASBroadcaster — ядро модели событий Flash MX
22.05.2002 24.09.2002

Этот недокументированный объект является ядром новой модели событий Flash MX. Он используется во внутреннем механизме для управления подпиской на сообщения о событиях встроенных объектов, отписки от сообщений о событиях встроенных объектов и распространения сообщений о событиях встроенных объектов на все подписанные объекты. Этот объект может также использоваться для ваших собственных нужд, и здесь он становится действительно полезным..

Чтобы хорошо понимать все термины, использованные в этой статье, пожалуйста, убедитесь, что вы прочитали статью "Новая модель событий в Flash MX".

Объект ASBroadcaster имеет четыре метода:

ASBroadcaster.initialize //Статический метод[1]
ASBroadcaster.addListener //Метод передается по наследству
ASBroadcaster.removeListener //Передается по наследству
ASBroadcaster.broadcastMessage //Передается по наследству

ASBroadcaster представляет ту же функциональность, что и библиотека ActionScript "FLEM", которую выпустил Branden Hall во времена Flash 5. Так что если вы пользовались FLEM, у вас не будет проблем с использованием этого встроенного движка событий.

ASBroadcaster.initialize(obj);

Это статический метод, он может использоваться только в вышеуказанном контексте, вызывается только непосредственно как метод самого объекта ASBroadcaster. Этот метод используется, чтобы добавлять функциональность Слушателя[2] для объекта, передаваемого объекту ASBroadcaster в качестве аргумента obj. Когда вызывается этот метод, он добавляет три других метода и одно скрытое свойство для передачи аргументу obj:

obj._listeners //скрытое свойство
obj.addListener //метод
obj.removeListener //метод
obj.broadcastMessage //метод

ASBroadcaster.addListener(obj);

Этот метод добавляется ко всем объектам, которые передаются методу ASBroadcaster.initialize в качестве аргумента. Он подписывает передаваемый в качестве аргумента объект obj на уведомления о событиях, относящихся к объекту, из которого вызван этот метод. Например:

Key.addListener(myobject);

Подписывает объект с именем myobject на получение сообщений о событиях объекта Key.
При вызове этого метода аргумент, переданный как obj, добавляется в массив _listeners. Этот метод возвращает true.

myobject={}; //создаем новый объект
subscribed=Key.addListener(myobject); //подписываем его на сообщения о событиях объекта Key
trace(subscribed); //выводит "true"

ASBroadcaster.removeListener(obj);

Этот метод также добавляется к объекту, передаваемому методу ASBroadcaster.initialize в качестве аргумента. Он отписывает передаваемый в качестве аргумента объект obj от сообщений о событиях, относящихся к объекту, из которого вызван метод. Например:

Key.removeListener(myobject);

Отписывает объект с именем myobject от получения сообщений о событиях объекта Key. При вызове этого метода массив _listeners просматривается до тех пор, пока в нем не будет найден объект, переданный как аргумент obj; после нахождения он удаляется из массива _listeners.

Этот метод возвращает true, если объект был успешно удален из массива _listeners, иначе он возвращает false, например, если имя объекта obj не было найдено в массиве _listeners.

myobject={}; //создаем новый объект
Key.addListener(myobject); //подписываем его на сообщения о событиях объекта Key
removed=Key.removeListener(myobject); //отписываем его от сообщений о событиях объекта Key
trace(removed[3]); //выводит "true"

removed=Key.removeListener(none_existent_object); //отписываем его от сообщений событиях объекта Key несуществующий объект, или объект, который не был на них подписан
trace(removed[4]); //выводит 'false'

ASBroadcaster.broadcastMessage("theEvent");

Этот метод также добавляется как аргумент ко всем объектам, которые передаются методу ASBroadcaster.initialize в качестве аргумента. Он используется для рассылки уведомления о событии всем объектам, подписанным на получение сообщений от объекта, которому принадлежит метод. Все объекты, содержащиеся в массиве _listeners объекта, которому принадлежит этот метод, оповещаются о происхождении события. Этот метод запрашивает один аргумент — theEvent, это строка, представляющая обработчик события, находящийся внутри всех подписанных объектов, и если свойство с именем theEvent находится в каком-либо подписанном объекте, вызывается ссылка на функцию, содержащуюся внутри этого свойства.

Например, когда происходит событие onMouseMove, объект Mouse выполняет такую строку кода:

this.broadcastMessage("onMouseMove");

И все объекты, содержащиеся в массиве Mouse._listeners будут оповещены о событии onMouseMove. Если какой-либо объект из массива Mouse._listeners имеет свойство с именем onMouseMove, метод broadcastMessage пытается вызвать содержимое этого свойства как функцию, следовательно, свойство onMouseMove — это обработчик событий, оно должно содержать ссылку на функцию.

ASBroadcaster._listeners

Это скрытое свойство является массивом, содержащим ссылки на все объекты, подписанные на получения сообщений о событиях объекта, которому принадлежит это свойство.

Пример Actionscript:

Чтобы лучше объяснить действие этого объекта, я приведу код, выполняющий те же функции, что и объект ASBroadcaster:

ASBroadcaster={};
ASBroadcaster.initialize=function(obj){
    obj.addListener=this.addListener;
    obj.removeListener=this.removeListener;
    obj.broadcastMessage=this.broadcastMessage;
    obj._listeners=[];
}
ASBroadcaster.addListener=function(obj){
    this.removeListener(obj);
    this._listeners.push(obj);
    return true;
}
ASBroadcaster.removeListener=function(obj){
    var a=this._listeners;
    var i=this._listeners.length;
    while(--i){
        if(a[i] == obj){
            a.splice(i,1);
            return true;
        }
    }
    return false;
}
ASBroadcaster.broadcastMessage=function(theEvent){
    var a=this._listeners;
    var i=this._listeners.length;
    while(--i){
        a[i][theEvent]();
    }
}

Если вы можете читать и понимать AS, вы должны были понять, что происходит.

Внутренний ActionScript ASBroadcaster:

Настоящий внутренний ActionScript для этого объекта не сильно отличается:

function AsBroadcaster(){};
    o=AsBroadcaster;
    o.broadcastMessage=ASnative(101, 12);
    o.addListener=function(x){
    this.removeListener(x);
    this._listeners.push(x);
    return(true);
}
o.removeListener=function(x){
    var a=this._listeners;
    var i=0;
    while(i if(a[i]==x){
              a.splice(i,1);
              return(true);
         }
         i++;
    }
    return(false);
}
o.initialize=function(o){
    o.broadcastMessage=ASnative(101,12);
    o.addListener=AsBroadcaster.addListener;
    o.removeListener=AsBroadcaster.removeListener;
    o._listeners=[];
    ASSetPropFlag(o,'broadcastMessage, addListener,removeListener,_listeners',13,1);
}
ASSetPropFlags(o,null,3);

Пример кода:

Чтобы привести пример полезности использования недокументированного объекта ASBroadcaster, мы добавим уведомление о событии onEnterFrame к объекту Movieclip, очень полезное событие, которое в настоящий момент недоступно в Flash MX Actionscript, возможно, из соображений производительности, также отметьте, что объект Movieclip не имеет методов addListener и removeListener в Flash MX Actionscript:

//добавляем "broadcastMessage", "addListener", "removeListener" и "_listeners" для объекта "Movieclip"
ASBroadcaster.initialize(Movieclip);
//создаем новый мувиклип на очень глубоком слое
this.createEmptyMovieClip("__enterframe",-99999);
//на каждом кадре распространяем сообщение о событии "onEnterFrame" всем подписанным клипам
this.__enterFrame.onEnterFrame=function(){
    Movieclip.broadcastMessage("onEnterFrame");
}

Пример использования:

//создаем объект
myobject={};
//определяем обработчик события "onEnterFrame"
myobject.onEnterFrame=function(){
trace("произошел вызов обработчика события onEnterFrame для     'myobject'");
}
//подписываемся на сообщения о событиях "Movieclip"
Movieclip.addListener(myobject);

См. раздел ASBroadcaster на Flashcoders Wiki.

[новое окно]>

Дэдлайн

 

Примечания:
[1] Перевод терминов:
  • Static method — статический метод;
  • Passed Down Method — наследуемый метод;
  • Listener — Слушатель.
[2] О Слушателях (Listeners) читайте в статье "Новая модель событий в Flash MX";
[3] В английском оригинале в этом месте по ошибке написано "subscribed.".
[4] В английском оригинале в этом месте по ошибке написано "subscribed.".

Статус документа
: публикация
>>> Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Что делатьНаверх
  © Разработка: Ростислав Сирык · О проекте "Флэш Потрошитель" · Архивы сайта
Flash MX

Стандарты Actionscript

Внутренняя архитектура Actionscript

Атрибуты тэгов OBJECT и EMBED

Метод LoadVars.decode

Свойство Stage.showMenu

System.security.allowDomain

System.showSettings

Динамическое присоединение компонентов

onKeyDown против onClipEvent(keyDown)

Модель событий Flash MX

ASBroadcaster — ядро модели событий Flash MX

Чтение ID3-тэгов из файла .mp3

ASSetPropFlags — функция защиты свойств объектов

Объект Local SharedObject

Удаление Local SharedObject

Глобальный путь к классам

Level против root

Dreamweaver

Создаем расширение для Dreamweaver MX

Настройка Dreamweaver MX

Длинное тире, короткое тире, дефис. Правописание и Dreamweaver

Illustrator

Растеризация текста
FlexiPedia