Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   addEventListener в as2 (http://www.flasher.ru/forum/showthread.php?t=139407)

Ilut 30.04.2010 02:28

addEventListener в as2
 
Доброе время суток. Есть ряд объектов, для которых динамически нужно привязать одну и ту же функцию. В AS3 есть addEventListener и removeEventListener. А как можно сделать то же самое в AS2. Заранее благодарю за помощь.

mooncar 30.04.2010 02:33

Что это за объекты и что значит "привязать"? Расшифруйте...
У разных объектов есть разные события, к ним обработчики привязываются соответствующие.

Котяра 30.04.2010 09:28

Вопрос не очень понятен..
Если нужны события как в AS3, можете попробовать воспользоваться моей библиотекой. Она не доделана в части Sprite, но листенеры работают нормально.

taras_ 30.04.2010 17:09

1. Скелет класса "кнопккко" (в данном случае: что-то вроде класса вашего объекта из того самого ряда):

Код AS1/AS2:

import mx.events.EventDispatcher;
import mx.utils.Delegate;
 
class butts.CButtton extends MovieClip {
 
        // событие, которое будем слушать
        public static var        EVENT_RELEASE        :String        = "release_super_button";
 
        // еще какое-то foo-событие
        public static var        EVENT_FOO        :String        = "f00_event_bla_bla";               
 
        // диспетчер
        private var                dispatcher        :EventDispatcher;
 
        // слушатель
        private var                listener        :Object;       
 
        // конструктор
        public function CButtton() {
 
                // заводим связочку диспетчер-слушатель
                dispatcher = new EventDispatcher();
                listener = new Object();               
 
        }
 
        // цепляем слушателя
        public function addEventListener(
                $event_type:String,
                $listenerFunc:Function,
                $listenerObj:Object):Void {
 
                listener[$event_type] = Delegate.create($listenerObj, $listenerFunc);               
                dispatcher.addEventListener($event_type, listener);               
        }
 
        // удаляем слушателя
        public function removeEventListener($event_type:String):Void {
                dispatcher.removeEventListener($event_type, listener);
                delete listener[$event_type];
        }
 
        // релизнули кнопку
        private function onRelease():Void {               
                // ...окружающий код
 
                // диспатчим событие!
                dispatcher.dispatchEvent( { type:EVENT_RELEASE } );
 
                // ...окружающий код
        }
 
        // еще что-то произошло :)
        private function fooSomeAction():Void {
                // ...окружающий код
 
                // диспатчим событие!
                dispatcher.dispatchEvent( { type:EVENT_FOO } );
 
                // ...окружающий код               
        }
 
}

2. Теперь перемещаемся в класс, где будем подключать\отключать слушателей:

Код AS1/AS2:

import butts.CButtton;
 
class CAppplication /*extends MovieClip*/ {       
 
        private var aCButtton_01                :CButtton;
        private var aCButtton_02                :CButtton;
        private var aCButtton_0X                :CButtton;
 
        private function forExampleMethod():Void {
 
                // цепляем
                aCButtton_01.addEventListener(CButtton.EVENT_RELEASE, doAction, this);               
                aCButtton_02.addEventListener(CButtton.EVENT_RELEASE, doAction, this);               
                aCButtton_0X.addEventListener(CButtton.EVENT_RELEASE, doAction, this);               
 
                // еще цепляем
                aCButtton_01.addEventListener(CButtton.EVENT_FOO, doFooAction, this);               
 
                // отцепляем
                aCButtton_01.removeEventListener(CButtton.EVENT_RELEASE, doAction);
                aCButtton_01.removeEventListener(CButtton.EVENT_FOO, doFooAction);               
 
                // ну вощем, все как в AS3 теперь
 
        }
 
        public function doAction():Void {
                trace("<doAction> " + arguments);
        }
 
        public function doFooAction():Void {
                trace("<doFooAction> " + arguments);
        }
}


Котяра 30.04.2010 17:31

опять :
Цитата:

listener = new Object();
в хелпе он просто для примера))))
листенером может быть любой объект. в том числе и this (CButtton).

в этой реализации нет target/currentTarget да и самого события(аргумент в ф-ции листенере),
Поэтому в АС2 практически никто не использовал mx.events.EventDispatcher из-за его убогости..

taras_ 30.04.2010 18:38

Не спорю: чего нет - того нет, что можно - то можно. За estimate реализации - респект, бро! Только выводы обобщающие - это зло! :)

Котяра 01.05.2010 17:47

Цитата:

Сообщение от taras_ (Сообщение 905140)
Только выводы обобщающие - это зло! :)

Выводы взяты не с потолка, я не видел за 7 лет кодинга на AS2 практически ни одной библиотеки кода, или примера реального приложения использующего mx.events.EventDispatcher.
Вот Delegate - да - полезная вещь!
Если ты, конечно, имеешь ввиду мой вывод:
"Поэтому в АС2 практически никто не использовал mx.events.EventDispatcher из-за его убогости.. "


Часовой пояс GMT +4, время: 02:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.