Flash Ripper RSS Readers

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

Ниже коротко перечислим известные нам способы прослушивания событий на примере обработки события "клик по кнопке 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



Это запись из категории 'Coding'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-30, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-25, Articles-26, AS3-52, Books-7, Business-3, Cairngorm-2, CI-1, Classes-10, Coding-30, Community-113, Components-19, Contests-28, Cool-Job-5, Debug-18, Design-26, Development-84, EMO-1, Events-13, Extensions-2, FAQ-8, FDS-1, Flash and html-5, Flash Player-35, Flash Updates-8, Flash-scene-1, flash10-4, FlashLite-2, Flex-30, Flex 2-80, Flickr-1, FMS-1, FPUG-46, frameworks-1, Games-11, Good Job!-35, HaXe-14, Health-2, Humor-10, Ideas-13, JavaScript-1, Job-26, JSFL-8, Links-2, Linux-1, Maps-1, Math-8, Money-11, MXML-1, Open Source-15, Optimization-2, Patterns-2, Personalities-27, Politics-1, Preloading-3, Productivity-9, PureMVC-10, Pv3d-1, Rafpug-4, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-8, Silverlight-5, Sound-3, Strategy-120, Tamarin-1, Tools-113, Training-2, Trash-8, URAFPUG-13, Urgent-1, Usability-6, Video-6, VoIP-5, Wallop-1, Wishlist-2, Архив всех записей (большой)

За последние месяцы:

Июл 2008: Международная встреча разработчиков URAFPUG завершена, URAFPUG - трансляция студии Flex-фреймворка Mate, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн

Май 2008: Если 3D, то по-взрослому: официальный запрос в Adobe по поводу контроля над мип-маппингом. Нужна ваша поддержка!, В этом году «Russian Flash Awards» пройдет в «космическом стиле», весь Май

Апр 2008: Программирование под флэш платформу. Cтатья (местами спорная), Advanced Flash Components бесплатно раздает все свои AS2-компоненты, весь Апр

Мар 2008: Зарплаты программистов в 2007 году, FlashPhone как технология года? Технология года? В Рунете?, весь Мар

Фев 2008: ЙА ФПУГ — регистрация на первую встречу UAFPUG продолжается, Закулисы Flex и секрет успеха опенсорс-проекта, весь Фев





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