在下面的代码中,事件" myEvent"在A类中调度的内容从未在C类中被监听过。您是否看到了问题所在?
Class A extends EventDispatcher{
A(){
dispatchEvent(new Event("myEvent"));
}
}
Class B extends A{
...
}
Class C extends EventDispatcher{
method(){
addEventListenet("myEvent", onresult);
var ob:A = new B();
ob.method();
}
onResult(){
...
}
}
答案 0 :(得分:1)
问题在于,创建中的A
对象不知道调度事件的位置" myEvent",并且调度到self不会做任何事情,因为无处可去要去的事件,即使你告诉它泡沫。您需要为整个A
类或类型为A
的特定对象提供侦听对象,以便该对象成为dispatchEvent()
调用的源,成为目标对于派遣的活动。
class A { // no inheritance needed
public static var listener:EventDispatcher;
public function A() {
if (listener) listener.dispatchEvent("myEvent");
}
}
另一种可能性是创建一个静态类,仅用于发送broascast事件,实现其功能,就像使用EventDispatcher
一样(使用EventDispatcher
的内部实例来添加和删除侦听器,发送事件并检查是否有人在听,并使用该课程的界面注册您打算发送给所有听众的任何事件类型。
public class Broadcaster {
private static var _instance:EventDispatcher=new EventDispatcher();
public static function addBroadcastListener
(s:String,f:Function,c:Boolean=false,p:int=0,w:Boolean=false) {
if (_instance) _instance.addEventListener(s,f,c,p,w);
}
// etc, just make wrappers for EventDispatcher functions
}
然后在C.method
中执行:
Broadcaster.addBroadcastListener("myEvent",onresult);
在A()中,您可以:
Broadcaster.dispatchEvent(new Event("myEvent"));
答案 1 :(得分:0)
您需要将监听器附加到ob
:
Class C extends EventDispatcher{
method(){
var ob:A = new B();
ob.addEventListener("myEvent", onresult);
ob.method();
}
onResult(){
...
}
}