上午,
我正在使用SimpleEvent
总线将数据从我的集中数据恢复器发送到窗口小部件。这工作得非常好,我从服务器获得一组新数据,RPC调用的成功方法将它放在Eventbus上,每个小部件查看数据是否适用于它,如果是,则“显示”它,如果没有,它什么都不做。每个请求只有一个数据集,小部件不依赖于已发送的其他数据。
现在我有一个Tree小部件。创建树的子节点也会抛出此数据集,并且此子节点将自身注册到Eventbus以恢复其子节点的数据。数据应在急速接收时(出于性能原因),因此我将获得多个数据集,这些数据集在“同一时间”(在for循环中)放在Eventbus上。我只控制它们放在那里的顺序(首先是根,然后是第一个孩子的数据......)。 Eventbus现在如何处理这些事件?
当前的解决方案方法:
您更喜欢哪种解决方案?为什么?
此致 斯蒂芬
PS:我最喜欢的答案是1.是Eventbus ^^的标准行为 PPS:解决方案也应该在介绍Webworkers时进行。
答案 0 :(得分:7)
EventBus#fireEvent
是同步的。这是设计的。您可以将事件传递给总线,让处理程序可以修改它,当执行返回到您的方法时,您可以检查事件;例如,它用于PlaceChangeRequestEvent
及其setMessage
。
仅供参考,如果处理程序抛出异常,则不会阻止执行其他处理程序。然后fireEvent
将异常(复数;几个处理程序可以抛出)包装在UmbrellaException
中。
答案 1 :(得分:3)
尽管EventBus是一种很好的解耦应用程序部分的方法,但并不意味着它应该“过度使用”。
我还认为你应该注意不要通过引入类似行为的同步/阻塞来规避客户端代码的异步行为。
Javascript是单线程的,所以我认为你不能同时拥有两个事件。他们将一个接一个地执行。 如果你在EventBus上激活一个事件(即SimpleEventBus),它将只通过附加的处理程序列表进行迭代并执行它们。如果没有附加处理程序,则没有任
我个人更喜欢第四个。特别是如果你计划将来某个时候使用CellTree。 Tree小部件/ CellTree小部件处理事件并通过遍历对象来构造其结构。