1

我正在我的 GWT 应用程序中实现 MVP 模式。在每次历史令牌更改时,我正在初始化演示者以获取各自的视图。如果用户导航到单个视图 GridView(比如)2 次,则相应的演示者 GridViewPresenter(比如)被初始化 2 次(根据 MVP 模式。如果我们不将演示者设为单例)。喜欢

 Presenter presenter = new GridViewPresenter();

在这种情况下,此演示者中的所有事件都将注册并侦听 2 次。我们怎样才能避免这种情况而不使我们的演示者单人。

4

1 回答 1

5

您必须跟踪您的演示者生命周期(在切换到新演示者之前,处置当前演示者,以便它取消注册其处理程序)。

或者,您可以使用 GWT 的 Places & Activities微框架,它就是这样做的:您的活动具有显式start的 andonStoponCancel(当异步启动时)。
GWT-Platform(GWT 的MVP 框架)也有类似的生命周期。

另一种选择是不要让您的演示者在其视图上添加处理程序:视图管理其事件处理程序,并通过表示为接口的合同(演示者实现该接口)通知演示者;对于给定的视图,一次只能有一个演示者(这样,新的演示者会覆盖前一个演示者)。
管理演示者生命周期的好处是,一旦不再使用演示者,就可以对其进行垃圾收集,而不是等待新的演示者在单例/长期视图中取代它们。

于 2013-07-19T14:21:23.217 回答