Бесплатно скачать Adobe Flash Player

Прислушиваемся к событиям

Ниже коротко перечислим известные нам способы прослушивания событий на примере обработки события "клик по кнопке cmpButton". Если вы хотите проверять приводимый код по ходу действия, разместите на рабочем поле компонент "Button" (из набора компонентов второй версии, т.е. тех, что поставляются вместе с Flash MX 2004 Professional) и присвойте ему имя cmpButton.

1. Создание объекта-листенера и назначение ему метода-обработчика событий

var objListener:Object = new Object();
objListener.click = function(evtObj:Object){
trace(this) // [object Object], т.к. this здесь ссылается на объект objListener
};
cmpButton.addEventListener("click", objListener);

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

2. Использование автономной функции для прослушивания событий

function fncListener(eventObj){
trace(this) // _level0.cmpButton - т.к. this здесь ссылается на компонент cmpButton
}
cmpButton.addEventListener("click", fncListener);

3. Использование встроенного метода .handleEvent

.handleEvent -- встроенный метод, имеющийся по умолчанию у каждого объекта. Он вызывается каждый раз, когда объект получает оповещение о событии (а для этого его надо подписать на события, используя синтаксис типа component.addEventListener("event", objListener); где objListener -- наш объект-листенер). Не забудьте добавить на рабочее поле экземпляр компонента TextInput и присвоить ему имя cmpTextInput:

objListener=new Object();
objListener.handleEvent = function(o){
if (o.type == "click"){
trace(this) // [object Object], this сылается на объект objListener
trace("кнопка кликнута"); // клик пришел от кнопки
} else if (o.type == "change"){
trace("текст изменен") // в поле ввода изменился текст
}
}
cmpButton.addEventListener("click", objListener);
cmpTextInput.addEventListener("change", objListener);

Кажущаяся простота этого способа может привести к путанице при прослушивании многих событий (исходный код будет менее наглядным).

4. Использование особенности ActionScript 2.0

Здесь используется особенность модели событий компонентов второй версии: при возникновении какого-либо события всегда вызывается метод, имя которого состоит из имени события и суффикса "Handler" (в нашем примере это событие "click"):

cmpButton.clickHandler = function(o){
trace(this); // _level0.cmpButton, this ссылается на компонент cmpButton
}

(Человек без подписи добавляет в комметариях: "...этот способ - довольно стрёмный. Иногда назначенные обработчики не выполняются. Так что лучше его не пользовать -- легче жить будет...")

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

5. Древнейший способ

Выделить компонент cmpButton, и прямо на нем написать:

on(click){
trace(this); // _level0.cmpButton
}

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

Писал: Rost, 8 Декабрь 2003 16:09

Комментарии:

незначительные дополнения:

1. лучше наверно не так, раз уж у нас есть МХ 2004
objListener=new Object();
objListener.click = function(evtObj){...}
а так
var objListener:Object = new Object();
objListener.click = function(sender:Object){...}

2. Способ 4(с хендлером) — довольно стрёмный. Иногда назначенные обработчики не выполняются. Так что лучше его не пользовать - легче жить будет...

jazzy - 9 Декабрь 2003 15:47

Спасибо вам Рост!

Sultan - 10 Декабрь 2003 12:49

2Человек без подписи:
Да, замечание дельное, я подправил код. Спасибо :)

Было бы хорошо еще знать хоть ваше имя :)

Рост - 10 Декабрь 2003 14:28

странно, неужели я пропустил самое важное — подпись... =)

jazzy - 11 Декабрь 2003 15:32



Подписаться на новости (RSS)




Примечания:
Статус документа
: в процессе
   2002-2009 Производство: Ростислав Сирык · О проекте · Подписка на новости (RSS)