GWTP Presenter 和 View 保留旧值
GWTP Presenter and View retaining old values
我正在使用 GWTP,我所有的演示者都扩展了 Presenter class。如果我从 A 导航到 B,然后返回到 A,那么仍然显示表单 A 中的旧值,而不是新值,就好像它正在显示旧值的副本一样。
如何让应用程序创建 Presenter 的新实例以避免显示旧值?
Presenter 和 Views 的实例化通常很昂贵,因此 GWTP 建议将两者都用作单例,视图是不必要的,因为 presenter 会保留实例,因此它的行为类似于内部单例。在这种情况下,对于您当前的情况,只需在生命周期阶段 "prepareFromRequest"、"onReveal" 或 "onReset" 之一重置演示者状态,具体取决于您的视图的工作方式。
请注意,这样做比看起来容易得多,如果您的视图与演示者不同步(这应该是您的情况),只需将代码从更新频率较低的生命周期(例如construction 或 onBind) 到更频繁更新的(例如 onReveal 或 onReset),然后,每当您导航您的演示者并显示视图时,这将被正确更新并且单例问题将变得无关紧要。
如果你真的想创建一个非单例演示者,你可以手动进行绑定,而不是使用 AbstractPresenterModule#bindPresenter。如果您尝试在多个地方引用演示者,这可能有点危险,而且在重置期间演示者将是相同的,但我认为每次显示时都会是一个新实例。
我正在使用 GWTP,我所有的演示者都扩展了 Presenter class。如果我从 A 导航到 B,然后返回到 A,那么仍然显示表单 A 中的旧值,而不是新值,就好像它正在显示旧值的副本一样。
如何让应用程序创建 Presenter 的新实例以避免显示旧值?
Presenter 和 Views 的实例化通常很昂贵,因此 GWTP 建议将两者都用作单例,视图是不必要的,因为 presenter 会保留实例,因此它的行为类似于内部单例。在这种情况下,对于您当前的情况,只需在生命周期阶段 "prepareFromRequest"、"onReveal" 或 "onReset" 之一重置演示者状态,具体取决于您的视图的工作方式。
请注意,这样做比看起来容易得多,如果您的视图与演示者不同步(这应该是您的情况),只需将代码从更新频率较低的生命周期(例如construction 或 onBind) 到更频繁更新的(例如 onReveal 或 onReset),然后,每当您导航您的演示者并显示视图时,这将被正确更新并且单例问题将变得无关紧要。
如果你真的想创建一个非单例演示者,你可以手动进行绑定,而不是使用 AbstractPresenterModule#bindPresenter。如果您尝试在多个地方引用演示者,这可能有点危险,而且在重置期间演示者将是相同的,但我认为每次显示时都会是一个新实例。