Форум 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)
-   -   [FAME][AS2]разбираемся с EventDispatcher (http://www.flasher.ru/forum/showthread.php?t=66217)

genius 30.06.2005 02:42

[FAME][AS2]разбираемся с EventDispatcher
 
из туториала по EventDispatcher на actionscript.org сделал два класса:

Код:

import test.Test2
import mx.utils.Delegate;
import mx.events.EventDispatcher;

class test.Test extends Object {
        var test2:Test2;
       
        // переменные функции для EventDispatcher
                var addEventListener:Function;
            var removeEventListener:Function;
            var dispatchEvent:Function
           
        function handleConstruct(eventObj) {
                        TRACE(Flashout.INFO + "handleConstruct called");
                }               
        function Test() {
                Flashout.init();
                        TRACE(Flashout.INFO + "Application started");                       
       
                    EventDispatcher.initialize(this);
                   
                    var myClass = new test.Test2(1000);
                        test2.addEventListener('timeout', Delegate.create(this, handleConstruct));

        }
       
        // --- Main Entry Point
        static function main() {               
                var test:Test = new Test();
        }
}
-------------------------------------------------------------
import mx.events.EventDispatcher;
import mx.utils.Delegate;
class test.Test2 {
            var timeInt:Number;
           
        var addEventListener:Function;
        var removeEventListener:Function;
        var dispatchEvent:Function;
       
        function handleTimer()
        {
                        TRACE(Flashout.INFO + "handleTimer");
                dispatchEvent({type:'timeout', target:this, message:'Hey dude the timer is done', time:getTimer()});
                clearInterval(timeInt);
        }
       
        function Test2(len)
        {                     
                EventDispatcher.initialize(this);
                timeInt = setInterval(Delegate.create(this, handleTimer), len);
        }
}

handleTimer() срабатывает, а вот handleConstruct() уже нет. в чем моя ошибка? помогите советом, пожалуйста :)

genius 02.07.2005 21:39

я оказался редкостным чайником и вместо test2 написал myClass. работающий код такой:

Код:

import test.Test2
import mx.utils.Delegate;
import mx.events.EventDispatcher;

class test.Test extends Object {
        var test2:Test2;
       
        // переменные функции для EventDispatcher
        var addEventListener:Function;
            var removeEventListener:Function;
            var dispatchEvent:Function
           
        function handleConstruct(eventObj) {
                TRACE(Flashout.INFO + "handleConstruct called");
                }               
        function Test() {
                Flashout.init();
                TRACE(Flashout.INFO + "Application started");                       
       
                    EventDispatcher.initialize(this);
                   
                    var test2 = new test.Test2(1000);
                test2.addEventListener('timeout', Delegate.create(this, handleConstruct));

        }
       
        // --- Main Entry Point
        static function main() {               
                var test:Test = new Test();
        }
}
-------------------------------------------------------------
import mx.events.EventDispatcher;
import mx.utils.Delegate;
class test.Test2 {
        var timeInt:Number;
           
        var addEventListener:Function;
        var removeEventListener:Function;
        var dispatchEvent:Function;
       
        function handleTimer()
        {
                TRACE(Flashout.INFO + "handleTimer");
                dispatchEvent({type:'timeout', target:this, message:'Hey dude the timer is done', time:getTimer()});
                clearInterval(timeInt);
        }
       
        function Test2(len)
        {                     
                EventDispatcher.initialize(this);
                timeInt = setInterval(Delegate.create(this, handleTimer), len);
        }
}

появился ещё вопрос.

в данном примере добавлять "слушателя" нужно следующим методом: test2.addEventListener()

почему не просто addEventListener() или test.addEventListener()? получается, что для того, чтобы назначить "слушателя" мне нужно иметь ссылку на "вещателя"? или я опять чего-то не понимаю, или это очень не гибкое решение.

KidsKilla 03.07.2005 01:51

а как ты себе представляешь прослушивание сообщений, не зная кто вещатель? +)

genius 03.07.2005 06:33

2KidsKilla: ну очень просто, есть же свойство eventObj.type, можно eventObj.dispatcher придумать. одно дело знать, кто вещатель, другое дело - для каждого "слушателя" тыкать прямой ссылкой в "вещателя"

KidsKilla 03.07.2005 12:28

..........


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

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