Вход

Просмотр полной версии : Проблема с AsBroadcaster


BBOY Ильич
01.03.2009, 17:51
Добрый день! Помогите решить следующую проблему:

Имеется класс

class utilities.Events
{

private static var _event:Object = new Object();

public function Events()
{
AsBroadcaster.initialize(_event);
}

public static function dispatchEvent(event:String, param:Object):Void
{
_event.broadcastMessage(event, param);
}

public static function addEventListener (type:String, func:Function):Void
{
var _listener:Object = new Object ();
_listener[type] = func;
_event.addListener(_listener);
}

}


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

utilities.Events.addEventListener("event", myFunction);

Ну и наконец оправляю событие:

utilities.Events.dispatchEvent("event");



В итоге - тишина, ничего не работает. :(
Спасибо.

qazwsx
01.03.2009, 17:59
А почему не EventDispatcher?

BBOY Ильич
01.03.2009, 18:01
Не нашел в хэлпе упоминания о нем:)


______________


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

import utilities.Events;

class musicscreen.icons.IconBattery extends MovieClip
{

public function IconBattery()
{
Events.addEventListener("event", myFunc);
}

public function myFunc()
{
trace("event is dispatched");
}

}

При этом, конструктор класса вызывается, но на событие мы не подписываемся. В чем проблема?

DarkLight
01.03.2009, 18:45
Гм. Конструктор Events не вызывается, так как используются только его статические методы. Соответственно, броадкастер не инициализируется и ничего не происходит. переименуй констркутор в статический метод и вызывай его перед добавлением листенеров, либо введи флаг, который показывает инициализирован ли броадкастер, и инициализируй внутри Events при первом вызове addEventListener или dispatchEvent

BBOY Ильич
01.03.2009, 18:46
DarkLight, спасибо, но я вызываю конструктор из главного класса, так что броадкастер инициализируется.

Проблема, я так понимаю, в том, что броадкастер инициализируется позже подписывания на событие...


_________


либо введи флаг, который показывает инициализирован ли броадкастер, и инициализируй внутри Events при первом вызове addEventListener или dispatchEvent
Спасибо! Все вышло :)

qazwsx
01.03.2009, 18:52
EventDispatcher в компонентах 2.0 описан. mx.events.EventDispatcher;. Такой диспатчер самому сделать тоже труда особого не составит >_>. К сожелению в нем нет ничего волшебного:(

DarkLight
01.03.2009, 18:53
Проверь порядок вызова и проставлен ли импорт. Код работает.

qazwsx
01.03.2009, 19:40
Ну да потому он и написал что все вышло )