Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   определение функции приемника заранее. (http://www.flasher.ru/forum/showthread.php?t=148511)

bifidokk 04.01.2011 14:58

определение функции приемника заранее.
 
Делаю класс, который будет отвечать за отправку данных на сервер и хотелось бы, чтобы приемник определялся заранее, вот таким образом:
Код AS3:

 serverAction = new ServerAction();
 serverAction.listener = название приемника

а далее уже в методе класса подставлять:

Код AS3:

 load.AddEventListener(Event.COMPLETE, listener);

объявление названия приемника как строки вызывает ошибку.
подскажите, как сделать правильно

alatar 04.01.2011 15:27

Код AS3:

private function listener(event:Event):void
{
}
...
//и уже в любом месте класса
xxx.addEventListener(Event.COMPLETE, listener);


spooner 04.01.2011 15:48

похоже автор хочет динамически менять приемник. не понятно только, что ему мешает.

bifidokk 04.01.2011 16:17

Цитата:

Сообщение от spooner (Сообщение 961914)
похоже автор хочет динамически менять приемник. не понятно только, что ему мешает.

именно)

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

Код AS3:

private function saveUser(){}

я объявляю название приемника:
Код AS3:

ServerAction.listener = "saveUser";

и далее применяю его:
Код AS3:

load.AddEventListener(Event.COMPLETE, listener);

соотвественно выскакивает ошибка, т.к. ServerAction.listener имеет тип string, поэтому и прошу помощи)

mikhailk 04.01.2011 16:21

Цитата:

я объявляю название приемника:
приемника чего? :)
приемника всего?

bifidokk 04.01.2011 16:26

Цитата:

Сообщение от mikhailk (Сообщение 961920)
приемника чего? :)
приемника всего?

приемника события Event.COMPLETE

alatar 04.01.2011 16:36

1. метод addEventListener пришется именно так, а не AddEventListener.
2. второй аргумент этого метода имеет тип Function, а вы ему пытаетесь подсунуть String
3. Что вам мешает изменить тип свойсва listener в вашем классе на Function?
4. Все слушатели должны принимать один параметр, так что на saveUser() будет тоже ругаться.

-De- 04.01.2011 16:37

Без кавычек не пробовали?

mikhailk 04.01.2011 16:42

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author mikhailk
        */

 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        var listener:Function = listenerOne;
                        stage.addEventListener(MouseEvent.CLICK, listener);
                }
 
                private function listenerOne(e:Event) : void
                {
                        trace("listenerOne");
                }
 
 
        }
 
}


bifidokk 04.01.2011 16:47

Цитата:

Сообщение от alatar (Сообщение 961924)
1. метод addEventListener пришется именно так, а не AddEventListener.
2. второй аргумент этого метода имеет тип Function, а вы ему пытаетесь подсунуть String
3. Что вам мешает изменить тип свойсва listener в вашем классе на Function?
4. Все слушатели должны принимать один параметр, так что на saveUser() будет тоже ругаться.

1 и 4 в курсе, просто опечатался, когда набирал
2. уже попробовал. объявляю его как тип Function. далее ловятся 2 варианта ошибок.

если имя приемника задается таким образом:
Код AS3:

ServerAction.listener = "saveUser";

то, лезет ошибка: невозможно преобразовать "saveUser" в Function. это логично.

если убрать кавычки, то скрипт видит saveUser как какую-то необъявленную переменную:
Access to undefined property saveUser


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

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