SimpleEventBus 提供了存储处理程序集合的非常基本的功能,并在适当时使用所有相关处理程序调用 event.dispatch()。我不会说您从父小部件“设置 EventBus 以侦听事件”。SimpleEventBus 没有“父级”的概念。相反,您传递对您的 SimpleEventBus 的引用。然后,任何对象都可以使用 SimpleEventBus.fireEvent 方法“触发事件”。没有等级制度。
同样,任何对象都可以使用 SimpleEventBus.addHandler() 监听这些事件。这最接近您的#4 - addHandler 接受一种事件类型和一个处理程序,因此每当该类型的事件被传递给fireEvent
(通过您的应用程序中的某些东西)时,该处理程序将被传递给事件。请注意,Event
调用的是处理程序,而不是 EventBus!EventBus只是调用event.dispatch(theHandler),事件的程序员负责调用handler中的相应函数。您的 #5 不准确,至少对于 SimpleEventBus - SimpleEventBus 根本不检查事件,除了查看要调用的处理程序。它不知道任何子小部件或任何应用程序逻辑,并且永远不会更改事件的类型。
您在 EventBus 中查看选择哪个区域的逻辑不合适 - 相反,您将创建一个处理程序来执行逻辑并侦听 ClickEvents。然后,该处理程序可以告诉所选区域它被直接选中,或者您可以创建自己的 RegionSelectionEvent,您可以沿着 EventBus 触发,然后可以通知所有区域发生了 RegionSelection,并且您的记录器可以获得通知,或者您的服务器监视器可以收到通知并通知老板有人选择了一个区域,或者其他什么。如果您只需要取消选择一个区域并选择另一个区域,那么事件总线就大材小用了。
另一方面,像“resize”这样的事件很有意义,因为你所有的小部件都可能需要知道它。