我在具体的布局生命周期中有什么钩子,或者通常在Vaadin 7中有什么钩子?
我想知道布局何时开始(出生)和停止(死亡)。具体来说,我怀疑我真的关心“附加”和“分离”。如果我稍后可以在用户的工作会话中重新显示该布局,则布局可以在屏幕上使用之前存在于屏幕之外。我认为附件是加入/离开显示的UI的过程,但我不确定。
并不重要,但我关心生命周期的原因显示在Push page的Book of Vaadin 7中。正如那里所见,我想通知一堆用户的布局(在UI中)关于他们的小部件所代表的数据的变化。因此,每个布局都需要调用一个方法,以使用新数据更新它们的小部件。
要通知每个布局,我需要知道哪些布局实例存在并且对此类更新感兴趣。所以我保留了一系列自我注册的布局。基本上是Observer pattern。 Push页面显示了这样的注册表集合。
缺少的部分:在Layout的代码中,我在哪里进行布局实例注册并取消注册?我想我可以使用Java构造函数和finalize
方法。但我怀疑我真的希望注册围绕附加和分离事件。
Layout
doc列出了许多附加/分离侦听器和attach
/ detach
方法。我不确定我应该使用哪种,如果有的话。
答案 0 :(得分:2)
你的假设是正确的。当组件获得父组时,它将附加到UI(或通常是会话)。所以这个组件与客户端相关(但它现在可能在客户端中不可见)。
解决此问题的一种方法是覆盖attach()
和/或detach()
来激活您注册/注销的逻辑。
def layout = new VerticalLayout()
layout.addAttachListener(new ClientConnector.AttachListener() {
@Override
void attach(ClientConnector.AttachEvent attachEvent) {
println "Attach: $attachEvent"
}
})
layout.addDetachListener(new ClientConnector.DetachListener() {
@Override
void detach(ClientConnector.DetachEvent detachEvent) {
println "Detach: $detachEvent"
}
})