在GWTP中,onBind、prepareFromRequest、revealInParent、onReveal、onReset在当前ChildPresenter的上下文中有什么区别?非常困惑

在GWTP中,onBind、prepareFromRequest、revealInParent、onReveal、onReset在当前ChildPresenter的上下文中有什么区别?非常困惑,gwt,gwtp,Gwt,Gwtp,我使用的是GWTP,我还以parentPresenter(例如:HeaderPage)和childPresenter(ContentPage)的形式使用NestedPresenter。我还想将信息从parentPresenter发送到childPresenter(例如:当用户登录HeaderPresenter时,信息将传递到childPresenter) 现在,我对onBind、prepareFromRequest、revealInParent、onReveal和onReset之间的区别感到非常

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

现在,我对onBind、prepareFromRequest、revealInParent、onReveal和onReset之间的区别感到非常困惑

谷歌说(?“在第一次加载时,onBind将首先被调用,然后prepareFromRequest将被调用sencond,revealInParent将被调用3rd,然后onReveal,然后onReset”

下面是我的问题清单:

-当页面包含页眉和内容时,循环(onBind、prepareFromRequest、revelainparent、onReveal、onReset)将首先在父页眉presenter中调用,然后在所有相同的循环(onBind、prepareFromRequest、revelainparent、onReveal、onReset)之后调用将在子级或嵌套内容演示器中被称为第二个

或者parentPresenter和childPresenter都是独立完成这个循环的

如果他们独立地经历这个循环,那么我们就有问题了。例如,每当用户刷新页面(页眉+内容)时,如果页眉已经检查了会话,那么我希望页眉将会话信息传递到子内容页面中,但是由于它们独立地经历了这个循环,那么当子演示者尚未初始化时,父演示者如何传递信息


第二个问题是如何知道应该将哪个方法放入哪个周期?

您的web应用程序可以被看作是一个演示者树。将树从底部移动到顶部,将对每个演示者调用
onBind
。绑定所有演示者后,将从树的顶部到底部对每个演示者调用
onReveal
prepareFromRequest
方法将在
onReveal
之前调用

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

当ParentPresenter检查会话时,ChildPresenter没有被初始化的风险

要从ParentPresenter与ChildPresenter沟通,我建议两种方法:

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

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


您也可以看到这一点

,因此我在ParentPresenter cos的onReset中使用了将信息从父级传递给子级的方法,当时onBind&onReveal已在childpresenter中调用,因此没有未初始化的风险。是吗?据我所知,你的ParentPresenter是你应用的标题。所以它只会被揭露一次(如果我错了,请纠正我)。获取用户会话将在ParentPresenter的onReaveal方法中完成。不,它将无法正常工作。假设我有第1页(页眉+内容1),第2页(页眉+内容2)。如果我在page1中将会话提取到parentPresenter的onReveal中,那么代码在page1中工作正常,但是当我打开page2时,pager中的标头获得了会话信息,但content2没有接收到应该从page2中的标头传递的信息。您应该将会话信息存储在用户对象(即单例)中。只需传递该用户实例,您就可以在应用程序中的任何位置共享会话状态