我正在使用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,然后将其调用sencond,然后将prepareFromRequest调用,将showInParent称为3rd,然后是onReveal,然后是onReset”。

所以这是我的问题清单:

-当具有标题和内容的页面,然后在父标题演示者中首先调用循环(onBind,prepareFromRequest,revealInParent,onReveal,onReset),然后在所有相同的循环之后(onBind,prepareFromRequest,revealInParent,onReveal,onReset)进行调用被称为儿童或嵌套内容演示者中的第二名?

还是parentPresenter和childPresenter都独立经历这个周期?

如果他们独立地经历这个周期,那么我们可能会遇到问题。例如,每当用户刷新页面(标题+内容)时,如果标题已经检查了会话,那么我希望标题将会话信息传递到子内容页面,但是由于他们独立地经历了循环,那么父演示者如何传递信息子主持人还没有初始化的时候?

第二个问题是如何知道应该在哪个循环中使用哪种方法?

最佳答案

您的Web应用程序可以看作是演示者的树。从下往上走树,每个主持人将调用onBind。一旦绑定了所有Presenter,将在每个Presenter上从树的顶部到底部调用onRevealprepareFromRequest方法将在onReveal之前调用。

因此,首先在ChildPresenter上调用onBind,然后在ParentPresenter上调用onBind,然后在ParentPresenter上调用onReveal,最后在ChildPresenter上调用onReveal

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

09-12 05:11