gpt4 book ai didi

java - Vaadin 中布局(或组件)的生命周期?

转载 作者:行者123 更新时间:2023-11-30 03:47:18 26 4
gpt4 key购买 nike

我对 Vaadin 7 中的布局(特别是布局)或组件的生命周期有什么钩子(Hook)?

生命周期事件?

我想知道布局何时开始(诞生)和停止(死亡)。具体来说,我怀疑我真的很关心“附加”和“分离”。在屏幕上使用之前,布局可以存在于屏幕外,甚至在之后(如果我稍后在用户的工作 session 中重新显示该布局)。我认为附件是加入/离开显示的 UI 的过程,但我不确定。

动机:观察者模式中的通知

这并不重要,但我关心生命周期的原因如 Push page 所示。 Book of Vaadin 7的。如图所示,我想通知一群用户的布局(在 UI 中)有关其小部件所表示的数据的更改。因此,每个布局都需要调用一个方法,以使它们使用新数据更新其小部件。

为了通知每个布局,我需要知道哪些布局实例存在并且对这种更新感兴趣。所以我保留了一组可以自行注册的布局。基本上,Observer pattern 。该推送页面显示了这样的注册表集合。

缺少的部分:在布局代码中的哪里可以注册和取消注册布局实例?我想我可以使用 Java 构造函数和 Finalize 方法。但我怀疑我真的希望注册围绕附加和分离事件进行。

附加/分离事件

Layout doc 列出了许多附加/分离监听器和 attach/detach 方法。我不确定应该使用哪一个(如果有的话)。

最佳答案

你的假设是正确的。当组件获取父集时,它会附加到 UI(或者一般来说是 session )。因此该组件与客户端相关(但现在在客户端中可能不可见)。

解决这个问题的一种方法是重写 attach()和/或 detach() 来触发您的逻辑来注册/注销。

或者通过添加附加和分离监听器: AttachListener对于 addAttachListener

    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"
}
})

关于java - Vaadin 中布局(或组件)的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com