3

我目前正在开发一个 GWT 应用程序,但我仍然对它如何组合在一起有些模糊(在没有首先了解整个框架的情况下进行更改的乐趣,尽管这可能很困难)。

我们有一些活动,它们都对应于 UI 的各个部分(例如,主要内容、工具栏和事物列表)。我不确定这是否是活动的意图,但我想我现在不能轻易改变。我现在的问题是,事物列表包含主要内容也需要的状态(当前选择),并且在某种程度上工具栏也需要(至少工具栏当前它——我已经问不出来了)。

但实际上存储它的合适地方是什么我猜想将实际的视图实现结合在一起并将选择仅存储在列表中并不是一个好主意。

4

1 回答 1

3

我在这里看到两个主要的解决方案:

  • 保持每个活动中的状态,并通过事件(在 上EventBus)保持它们同步。即:“事物列表”有一个当前选择,主视图也有一个,工具栏也有;并且每次该值更改时,进行更改的活动都会在事件总线上触发一个事件,以便其他活动可以更新它们的状态,以便所有活动在它们自己的状态下具有相同的值。

  • 使用单例对象(如果您使用 GIN 和依赖注入,只需使用注释对象@Singleton并将其注入所有活动)将状态保持在中心位置。活动在状态持有者对象上注册事件处理程序,以便在它更改时得到通知。也就是说,每次活动调用setCurrentSelection(例如)时,都会触发一个事件(例如 a ValueChangeEvent),并且由于所有活动都在侦听它,因此它们可以根据新值更新其视图或任何内容。您可以选择在事件总线上分派事件(类似于PlaceController)或让状态持有者实现HasValueChangeHandlers。只要确保在活动时取消注册处理程序stop避免内存泄漏(在事件总线上调度更容易:只需在总线上注册作为参数传递给start方法的处理程序,当活动停止时它们将自动取消注册,您甚至不必考虑它)。

实际上,PlaceController是这种共享状态当前位置)的一个很好的例子。

于 2012-07-19T06:42:03.067 回答