Ниже коротко перечислим известные нам способы прослушивания событий на примере обработки события "клик по кнопке cmpButton". Если вы хотите проверять приводимый код по ходу действия, разместите на рабочем поле компонент "Button" (из набора компонентов второй версии, т.е. тех, что поставляются вместе с Flash MX 2004 Professional) и присвойте ему имя cmpButton.
cmpButton
var objListener:Object = new Object(); objListener.click = function(evtObj:Object){ trace(this) // [object Object], т.к. this здесь ссылается на объект objListener }; cmpButton.addEventListener("click", objListener);
Этот способ является предпочтительным с точки зрения хорошей практики программирования, так как приводит к минимальной путанице при создании многих обработчиков многих событий.
function fncListener(eventObj){ trace(this) // _level0.cmpButton - т.к. this здесь ссылается на компонент cmpButton } cmpButton.addEventListener("click", fncListener);
.handleEvent
.handleEvent -- встроенный метод, имеющийся по умолчанию у каждого объекта. Он вызывается каждый раз, когда объект получает оповещение о событии (а для этого его надо подписать на события, используя синтаксис типа component.addEventListener("event", objListener); где objListener -- наш объект-листенер). Не забудьте добавить на рабочее поле экземпляр компонента TextInput и присвоить ему имя cmpTextInput:
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);
Кажущаяся простота этого способа может привести к путанице при прослушивании многих событий (исходный код будет менее наглядным).
Здесь используется особенность модели событий компонентов второй версии: при возникновении какого-либо события всегда вызывается метод, имя которого состоит из имени события и суффикса "Handler" (в нашем примере это событие "click"):
Handler
click
cmpButton.clickHandler = function(o){ trace(this); // _level0.cmpButton, this ссылается на компонент cmpButton }
(Человек без подписи добавляет в комметариях: "...этот способ - довольно стрёмный. Иногда назначенные обработчики не выполняются. Так что лучше его не пользовать -- легче жить будет...")
Этот способ рекомендуется использовать только в процессе разработки, когда нужно быстро создать обработчик какого-либо события.
Выделить компонент cmpButton, и прямо на нем написать:
on(click){ trace(this); // _level0.cmpButton }
В подавляющем большинстве случаев первого способа достаточно, однако, зная остальные, вы можете сами выбирать лучший способ для конкретных обстоятельств.
незначительные дополнения:
1. лучше наверно не так, раз уж у нас есть МХ 2004 objListener=new Object(); objListener.click = function(evtObj){...} а так var objListener:Object = new Object(); objListener.click = function(sender:Object){...}
2. Способ 4(с хендлером) — довольно стрёмный. Иногда назначенные обработчики не выполняются. Так что лучше его не пользовать - легче жить будет...
Спасибо вам Рост!
2Человек без подписи: Да, замечание дельное, я подправил код. Спасибо :)
Было бы хорошо еще знать хоть ваше имя :)
странно, неужели я пропустил самое важное — подпись... =)
Предыдущий пост
Следующий пост