在何处表明';不同的GWT活动需要什么?

在何处表明';不同的GWT活动需要什么?,gwt,gwt-mvp,gwt-places,gwt-activities,Gwt,Gwt Mvp,Gwt Places,Gwt Activities,我目前正在开发一个GWT应用程序,但我仍然不清楚它是如何结合在一起的(在不了解整个框架的情况下进行更改的乐趣,尽管这可能很困难) 我们有一些活动都对应于UI的某些部分(例如,主要内容、工具栏和事物列表)。我真的不确定这是否是活动的目的,但我想我现在真的不能轻易改变。我现在的问题是,列表中的内容保持着主要内容也需要的状态(当前选择),在某种程度上工具栏也需要(至少工具栏现在有了它——我不敢问津) 但是,什么才是储存这些东西的合适地方呢?我想将实际视图实现耦合在一起并只将选择存储在列表中并不是一个好

我目前正在开发一个GWT应用程序,但我仍然不清楚它是如何结合在一起的(在不了解整个框架的情况下进行更改的乐趣,尽管这可能很困难)

我们有一些活动都对应于UI的某些部分(例如,主要内容、工具栏和事物列表)。我真的不确定这是否是活动的目的,但我想我现在真的不能轻易改变。我现在的问题是,列表中的内容保持着主要内容也需要的状态(当前选择),在某种程度上工具栏也需要(至少工具栏现在有了它——我不敢问津)


但是,什么才是储存这些东西的合适地方呢?我想将实际视图实现耦合在一起并只将选择存储在列表中并不是一个好主意。

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

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

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


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

好的,我现在已经在活动中复制了该状态,当我进一步了解应该如何使用GWT时,我可能会将其全部丢弃,然后用另一种方式进行。不过,就目前而言,它的效果还不错。