在独立类之间进行通信的最简单方法是什么? 我一直在寻找两天,一无所获, 是不是有一种方法,一个类有一个dispatchEvent,另一个有一个addEventListener,有一个自定义事件?我只能在同一个班级中找到与父母关系的解决方案,但我正在寻找的就像一个“兄弟”的关系可以这么说 感谢
答案 0 :(得分:2)
通常,您希望调度事件的类扩展EventDispatcher
或实现IEventDispatcher
。 (所有DisplayObject
都这样做,所以如果你的课程是DisplayObject
,你不需要做任何额外的事情。)
在调度班中:
class DispatchingClass extends Event Dispatcher {
function doSomething() {
// do stuff
dispatchEvent(new Event("FOO"));
}
}
在听力课上:
class ListeningClass {
function startListening(dispatcher:DispatchingClass) {
dispatcher.addEventListener("FOO", handleFoo);
}
function handleFoo(evt:Event) {
// do stuff
}
}
EventDispatchers可以正常使用自定义事件。
如果由于某种原因,您的听力课程没有并且无法获得您的调度课程的实例,那么您可以创建一个全局事件广播器。基本上,创建一个普遍可访问的类,扩展EventDispatcher
(或实现IEventDispatcher
)并监听和调度事件到任何告诉它的事物。
以下是事件广播公司的简单实现:
import flash.events.EventDispatcher;
public class EventBroadcaster extends EventDispatcher {
private static var _instance:EventBroadcaster = new EventBroadcaster();
public function EventBroadcaster() {
if (_instance != null) {
trace ("Error: an instance of EventBroadcaster() already exists.");
}
}
public static function getInstance():EventBroadcaster {
return EventBroadcaster._instance;
}
}
你几乎以同样的方式使用它:
class DispatchingClass {
function doSomething() {
// do something
EventBroadcaster.getInstance().dispatchEvent(new Event("FOO"));
}
}
class ListeningClass {
function startListening() {
EventBroadcaster.getInstance().addEventListener("FOO", handleFoo);
}
function handleFoo(evt:Event) {
// do stuff
}
}
dispatchEvent()
和addEventListener()
只是内置EventDispatcher
的功能。
在Event Broadcaster - Simple events solution...讨论了如何制作活动广播以及如何添加有用功能。文章Centralized Event Management in Actionscript 2.0对这个概念有了很好的介绍。
答案 1 :(得分:0)
因此,如果您有ChildClass1,ChildClass2和ParentClass,其中ChildClass1和ChildClass2都是ParenClass的子级。
ChildClass1将调度一个事件。 ParentClass将侦听此事件,然后它的处理程序将更新ChildClass2。
答案 2 :(得分:0)
如果您没有ParentClass,您还可以使用注册Childs的ChildManagerClass并相应地通知它们。