我正在使用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上从树的顶部到底部调用onReveal
。 prepareFromRequest
方法将在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