addEventListener(MyEvents.FIRE_EVENT, gotEvent);
совпадает с
this.addEventListener(MyEvents.FIRE_EVENT, gotEvent);
, который прослушивает FIRE_EVENT
, отправленный объектом this
- вашим основным mxml-приложением. Чтобы прослушивать события, запущенные из объекта asClass
, вы должны вызвать addEventListener для этого объекта.
asClass.addEventListener(MyEvents.FIRE_EVENT, gotEvent);
Таким образом, вы не можете прослушивать события, запущенные из конструктора. В следующем коде показан правильный способ прослушивания событий, запускаемых объектом asClass
(из любого места, кроме конструктора).
protected function appCComplete(event:FlexEvent):void{
var asClass:ASClass = new ASClass();
asClass.addEventListener(MyEvents.FIRE_EVENT, gotEvent);
}
protected function gotEvent(event:MyEvents):void{
Alert.show("got event");
}
Если вы подумаете об этом, вы увидите, что это имеет смысл. Конструктор используется для создания объекта - подписчики событий обычно заинтересованы в некоторых действиях / изменениях, происходящих с объектом, когда объект полностью построен и функционирует.
Тем не менее, вы можете передать ссылку на this
или функцию в конструктор ASClass
и затем назначить эту функцию в качестве прослушивателя событий из конструктора, если хотите.
public class ASClass extends UIComponent{
public function ASClass(listener:Function){
this.addEventListener(MyEvents.FIRE_EVENT, listener);
dispatchEvent(new MyEvents(MyEvents.FIRE_EVENT));
}
}
var asClass:ASClass = new ASClass(this.gotEvent);//pass the function.
//or
public class ASClass extends UIComponent{
public function ASClass(listenerObj:Object){
this.addEventListener(MyEvents.FIRE_EVENT, listenerObj.gotEvent);
dispatchEvent(new MyEvents(MyEvents.FIRE_EVENT));
}
}
var asClass:ASClass = new ASClass(this);//pass the object.
Лично я не могу придумать много сценариев, в которых я хотел бы пойти по этому пути: подумайте о некотором редизайне, чтобы вы слушали события после того, как конструктор вернется.