我目前正在开发一个 GWT 应用程序,我对它们如何组合在一起仍然有些模糊(在没有首先了解整个框架的情况下不得不进行更改的乐趣,尽管这可能很困难无论如何)。
我们有一些 Activity 都对应于 UI 的各个部分(例如主要内容、工具栏和事物列表)。我不太确定这是否是 Activities 的预期方式,但我想我现在不能轻易改变它。我现在的问题是,事物列表包含主要内容也需要的状态(当前选择),并且在某种程度上工具栏也需要(至少工具栏当前有 - 我无话可说).
但是什么才是真正适合存储它的地方?我想将实际的 View 实现耦合在一起并仅将选择存储在列表中并不是一个好主意。
最佳答案
我在这里看到两个主要的解决方案:
在每个事件中保持状态并通过事件(在
EventBus
上)保持它们同步。那就是:“事物列表”有一个当前选择,主视图也有一个,工具栏也有;每次该值发生变化时,进行更改的 Activity 都会在事件总线上触发一个事件,以便其他 Activity 可以更新它们的状态,这样所有 Activity 在它们自己的状态下都具有相同的值。使用单例对象(如果您正在使用 GIN 和依赖注入(inject),只需使用
@Singleton
注释对象并将其注入(inject)所有事件)以将状态保持在中央地方。事件在 state holder 对象上注册事件处理程序,以便在它发生变化时得到通知。也就是说,每次事件调用setCurrentSelection
(例如)时,都会触发一个事件(例如ValueChangeEvent
),并且因为所有事件都在监听它,所以它们可以更新他们的观点或其他取决于新值(value)的观点。您可以选择在事件总线上分派(dispatch)事件(类似于PlaceController
)或让状态持有者实现HasValueChangeHandlers
。只需确保在事件停止
时取消注册处理程序以避免内存泄漏(在事件总线上调度使其更容易:只需在总线上注册处理程序作为参数传递给start
方法,当 Activity 停止时,它们将自动取消注册,你甚至不必考虑它)。
实际上,PlaceController
是这种共享状态(当前位置)的一个很好的例子。
关于gwt - 将不同 GWT 事件所需的状态放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554525/