在哪里放置不同GWT活动所需的状态?

时间:2012-07-19 05:35:34

标签: gwt gwt-mvp gwt-places gwt-activities

我正在研究一个GWT应用程序,我仍然有点模糊它们如何组合在一起(在不首先理解整个框架的情况下进行更改的乐趣,尽管这可能很难反正)。

我们有一些活动都与UI的部分相对应(例如主要内容,工具栏和事物列表)。我不确定这是否是活动的意图,但我想我现在无法轻易改变。我现在的问题是,事物列表包含主要内容也需要的状态(当前选择),以及工具栏的方式(至少当前的工具栏它 - 我无法询问)。

实际上是一个适合存放的地方?我想将实际的视图实现耦合在一起并将选择仅存储在列表中并不是一个好主意。

1 个答案:

答案 0 :(得分:3)

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

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

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

实际上,PlaceController是此类共享状态当前位置)的一个很好的示例。