【问题标题】:best practice to use EventBus with GWT components将 EventBus 与 GWT 组件一起使用的最佳实践
【发布时间】:2012-03-19 17:11:28
【问题描述】:

假设我有一个组件 C,它在我的应用程序的 2 个地方使用。例如,我有一个显示在 2 个选项卡中的文件夹列表。当用户重命名文件夹的一部分时,此更改也应反映在另一部分中。

我正在考虑为此使用 EventBus 并使文件夹组件触发 EventBus 事件,例如 FolderChangedEvent。此事件将被第二个文件夹组件拦截,该组件将自动更新其文件夹列表。

问题是,如果我想在某个时候在第三个地方使用这个文件夹组件,这个地方也会更新文件夹列表。这可能不是应用程序的预期行为。

通常,我会让 Folder 组件有一个自己的 addFolderChangedHandler(...) 方法,但是由于这个组件非常复杂并且有子组件,这可能会创建意大利面条式的代码。但是,我觉得这个组件不应该包含任何特定于应用程序的逻辑并直接在应用程序的 EventBus 中抛出事件,这对它来说太高级了。

此案例的最佳实践是什么?您如何有效地使用 EventBus?

【问题讨论】:

    标签: gwt event-bus


    【解决方案1】:

    事件总线的目的是使事件处理更容易,是的,使代码更具可读性和可管理性。假设您的困境在于如何对事件进行分类,我将回答这个问题。

    GWTEvent 类有一个 source() 方法。这会告诉您谁触发了该事件。 如果这是不可接受的,那么您始终可以在您的事件中拥有一个由发件人填充的“id”字段。因此,如果 TreeView1 正在触发事件,则事件的 id 将设置为“treeView1”。当事件处理程序接收到这个事件时,它将检查 id 并决定是否处理该事件。这样,您就可以为整个应用程序使用单个“上帝”事件处理程序。

    【讨论】:

      【解决方案2】:

      eventBus 非常适合基本实现,但我发现在复杂的应用程序中需要使用 Event 发送数据,例如在触发 MyObjectCreated 事件时创建的新 NyObject。

      GWT-Structs library 中有一个很好的实现。请参阅动态发布者-订阅者绑定example,了解如何通过类型化发布者和订阅者传递数据。

      【讨论】:

        猜你喜欢
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 2020-03-21
        • 2015-11-12
        • 2022-06-22
        • 1970-01-01
        相关资源
        最近更新 更多