Добавить EventListener в функцию? - PullRequest
0 голосов
/ 09 марта 2012

Быстрый вопрос ... Можно ли прикрепить EventListener к функции?Так что если в любой момент выполнения функции будет отправлено событие, EventHandler будет запущен?

Ответы [ 5 ]

3 голосов
/ 09 марта 2012

Вы можете использовать сцену для отправки такого события и прослушивания его:

stage.addEventListener("myFunctionWasCalled", callback);
myFunction();

public function callback(event:Event):void {
    trace("callback executed");
}

public function myFunction():void {
    stage.dispatchEvent(new Event("myFunctionWasCalled"));
}
2 голосов
/ 09 марта 2012

Слушатели событий прикрепляются к объектам, которые принадлежат классу, который происходит от EventDispatcher. Вы не можете прикрепить их к функции.

0 голосов
/ 09 марта 2012

Чтобы прикрепить прослушиватель событий к объекту, этот объект должен реализовывать интерфейс IEventDispatcher. Таким образом, вы можете расширить класс Function и добавить свои методы. Документы AS3 говорят, что Function не является окончательным, но компиляция AS3 не согласна с этим: VerifyError: Error #1103: Class Bla cannot extend final base class.

Итак, краткий ответ: вы не можете присоединить прослушиватель событий к функции .

Но, как уже упоминалось, вы могли бы:

  1. Передать обратные вызовы / обратные вызовы функции, которая будет вызываться в определенный момент: function bla(callback1:Function, callback2:Function):void.
  2. Отправка событий от какого-либо другого объекта во время выполнения функции, например, вы можете создать класс Functor, который имеет метод execute() и реализует IEventDispatcher. Таким образом, вы вызываете функцию myFunctor.execute() и можете получать отправленные события.
0 голосов
/ 09 марта 2012

Если вы хотите прослушивать событие только в течение жизни вызова функции, просто добавьте / удалите при необходимости.пример:

function somefunction():void{
    someobject.addEventListener(Event, eventhandler);
    ... doing stuff
    someobject.removeEventListener(Event, eventhandler);
}

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

Типичность: вам действительно нужно беспокоиться об этом в жизни и смерти объекта по сравнению с жизнью и смертью вызова функции.

0 голосов
/ 09 марта 2012

Этого можно добиться, просто передав ссылку на функцию (обратный вызов) в качестве аргумента

function cb(s:String):void {
   trace(s);
}

function doit(f:Function):void {
   // do something
   f("Hi");
   // do some more stuff
}

doit(cb);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...