在GWTP中,onBind、prepareFromRequest、revealInParent、onReveal、onReset在当前ChildPresenter的上下文中有什么区别?非常困惑
我使用的是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都是独立完成这个循环的 如果他们独立地经历这个循环,那么我们就有问题了。例如,每当用户刷新页面(页眉+内容)时,如果页眉已经检查了会话,那么我希望页眉将会话信息传递到子内容页面中,但是由于它们独立地经历了这个循环,那么当子演示者尚未初始化时,父演示者如何传递信息在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之间的区别感到非常
第二个问题是如何知道应该将哪个方法放入哪个周期?您的web应用程序可以被看作是一个演示者树。将树从底部移动到顶部,将对每个演示者调用
onBind
。绑定所有演示者后,将从树的顶部到底部对每个演示者调用onReveal
。prepareFromRequest
方法将在onReveal
之前调用
因此,首先对ChildPresenter调用onBind
,然后对ParentPresenter调用onBind
,然后对ParentPresenter调用onReveal
,最后对ChildPresenter调用onReveal
当ParentPresenter检查会话时,ChildPresenter没有被初始化的风险
要从ParentPresenter与ChildPresenter沟通,我建议两种方法:
- 当ParentPresenter获取会话时,ParentPresenter通过
触发一个EventBus
,ChildPresenter注册到该事件并对其作出反应SessionLoadedEvent
- 当ParentPresenter获取会话时,ParentPresenter直接调用
。ChildPresenter将在childPresenter.onSessionFetched(sessionData)
方法中使用onSessionFetched
执行他想要的任何操作sessionData
您也可以看到这一点,因此我在ParentPresenter cos的onReset中使用了将信息从父级传递给子级的方法,当时onBind&onReveal已在childpresenter中调用,因此没有未初始化的风险。是吗?据我所知,你的ParentPresenter是你应用的标题。所以它只会被揭露一次(如果我错了,请纠正我)。获取用户会话将在ParentPresenter的onReaveal方法中完成。不,它将无法正常工作。假设我有第1页(页眉+内容1),第2页(页眉+内容2)。如果我在page1中将会话提取到parentPresenter的onReveal中,那么代码在page1中工作正常,但是当我打开page2时,pager中的标头获得了会话信息,但content2没有接收到应该从page2中的标头传递的信息。您应该将会话信息存储在用户对象(即单例)中。只需传递该用户实例,您就可以在应用程序中的任何位置共享会话状态