我正在使用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独立完成周期?
如果他们独立完成周期,那么我们就会遇到问题。例如,每当用户刷新页面(标题+内容)时,如果标题已经检查了会话,那么我希望标题将会话信息传递到子内容页面,但是因为它们独立地经历了循环,那么父主持人如何传递信息当儿童主持人没有初始化?
第二个问题是如何知道应该将哪种方法放入哪个循环?
答案 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