我在一个应用程序中使用GWTP。在这个应用程序中,我经常需要做一个PresenterWidget
,它包含每个标签中有一个PresenterWidget
的标签。
由于容器是PresenterWidget
,我不能使用TabContainerPresenter
类,所以我正在做我自己的实现。
我遇到了一些问题,而试图管理包含在制表符(onReveal()
, onHide()
等)PresenterWidget
的生命周期。
第一个问题:在这种特殊情况下,是否建议手动调用onReveal()
, onHide()
等?
第二个问题:我试图管理生命周期而不调用这些方法。
我是这样做的:当用户单击一个选项卡时,主演示者调用setInSlot(index,presenterWidget)
将相应的PresenterWidget
放在右边的选项卡中。
但是:当我点击一个选项卡时,onReveal()
在相应的PresenterWidget
上被调用(好!)然后onReset()
在所有PresenterWidget
上被调用:为什么全部?我希望onReset()
只在活动选项卡对应的PresenterWidget
上被调用。
=>在这种情况下setInSlot()
是正确的方法调用?
也许这可能会有所帮助:https://github.com/ArcBees/GWTP/wiki/Presenter-%22Slots%22
- 我不建议手动调用生命周期方法。没有它们也能正常工作。
- 您希望使用
setInSlot()
方法,因为在任何时候只有一个PresenterWidget
是活动的。
然而,你为每个PresenterWidget
使用不同的插槽。setInSlot()
的工作方式是它替换任何分配给该槽的PresenterWidget
。因为每个选项卡使用不同的插槽,所以它不会删除其他PresenterWidgets
。其他PresenterWidget
留在他们的位置,可能这就是onReset()
被调用的原因。
你有两个选择:
- 如果你想保持不同的插槽,你应该调用
removeFromSlot
对所有不可见的PresenterWidgets
。 - 只指定一个插槽(TAB_CONTENT),并简单地使用
setInSlot()