在GWTP中,在Present-ChildPresenter的Context中onBind,prepareFromRequest,revealInParent,onReveal,onReset有什么区别?非常困惑

时间:2014-01-19 05:55:02

标签: gwt gwtp

我正在使用GWTP,我也是以parentPresenter(Ex:HeaderPage)和childPresenter(ContentPage)的形式使用NestedPresenter。我还想从parentPresenter发送信息到childPresenter(例如:当用户在HeaderPresenter中登录时,信息将传递给childPresenter)。

现在,我对onBind,prepareFromRequest,revealInParent,onReveal,onReset之间的区别感到很困惑。

谷歌说(https://code.google.com/p/gwt-platform/wiki/FrequentlyAskedQuestions#How_do_I_choose_between_onReveal()_and_onReset()?)“在第一次加载时,将首先调用onBind,然后将prepareFromRequest调用为sencond,revealInParent调用3rd,然后调用onReveal,然后调用onReset”。

以下是我的问题清单:

- 当一个页面有Header&内容,然后循环(onBind,prepareFromRequest,revealInParent,onReveal,onReset)将在父标题展示器中调用 first ,然后在所有相同的循环(onBind,prepareFromRequest,revealInParent,onReveal,onReset)之后在子级或嵌套内容演示者中调用 second

或者parentPresenter& childPresenter独立完成周期?

如果他们独立完成周期,那么我们就会遇到问题。例如,每当用户刷新页面(标题+内容)时,如果标题已经检查了会话,那么我希望标题将会话信息传递到子内容页面,但是因为它们独立地经历了循环,那么父主持人如何传递信息当儿童主持人没有初始化?

第二个问题是如何知道应该将哪种方法放入哪个循环?

1 个答案:

答案 0 :(得分:4)

您的Web应用程序可以看作是演示者树。从从底部到顶部走树,将在每个Presenter上调用onBind。绑定所有演示者后,将在每个演示者上调用onReveal,从树的顶部到底部prepareFromRequest方法将在onReveal之前调用。

因此,onBind将首先在ChildPresenter上调用,然后在ParentPresenter上调用onBind,然后在ParentPresenter上调用onReveal,最后onReveal将在拜访了ChildPresenter。

当ParentPresenter检查会话时,不存在ChildPresenter初始化的风险。

要从ParentPresenter传递到ChildPresenter,我建议采用两种方法:

  • 当ParentPresenter提取会话时,ParentPresenter通过SessionLoadedEvent触发EventBus,并且ChildPresenter注册到该事件并对其作出反应

  • 当ParentPresenter提取会话时,ParentPresenter会直接调用childPresenter.onSessionFetched(sessionData)。 ChildPresenter会在sessionData方法中使用onSessionFetched执行任何操作。

您还可以看到此https://github.com/ArcBees/GWTP/wiki/Presenter-Lifecycle