gwt - 将不同 GWT 事件所需的状态放在哪里?

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

我目前正在开发一个 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/

相关文章:

java - GWT String.replace 不起作用

GWT、MVP、GIN、代码拆分?

GWT 2.1 MVP(事件/地点)和选项卡式显示

java - 从 servlet 重定向到 GET 位置?

java - GWT 2.6 控制台警告

gwt - 在 GWT 中需要应用范围的 CSS 常量

新浏览器窗口中的GWT弹出窗口

gwt - 使用 MVP Arch 在 GWT 中创建动态 View

java - 如何使用特定的 Widget 注入(inject) GWT Activity#start?