微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vaadin Flow 恢复/撤消值更改而无需再次触发侦听器

如何解决Vaadin Flow 恢复/撤消值更改而无需再次触发侦听器

(使用 Vaadin 18)

我在打开确认对话框的组合框上有一个值更改侦听器,允许用户确认更改。因为这是在值更改侦听器中,所以值在技术上已经更改。因此,当他们选择“否”时,我需要恢复该值。除了手动设置值之外,似乎没有任何 API 部分可以做到这一点。

但是当通过 setValue(...) 恢复时,监听器会再次触发。我需要防止它再次开火。目前我能够做到的唯一方法是使用额外的“ignoreNextChange”布尔变量,这可以防止逻辑第二次运行。有没有更简单的方法来做到这一点?我无论如何都看不到添加一个在值更改之前触发的侦听器。

我不能简单地忽略所有非客户端更改,因为这会破坏绑定。并且在侦听器内部更改侦听器注册不起作用,因为我还需要将其添加回来,这无论如何都会导致它被触发。

解决方法

您的假设是正确的,您无法阻止 在值更改处理程序中更改(事后发生)。

您的主要选择是:

  • 你只对“人为”的变化(来自客户)做出反应。看 isFromClient inside the `ValueChangeEvent

  • 或者将 UI 与操作分离(给用户一些 UI 来请求 更改,再次询问,然后进行更改)——这可以通过多个 方法。一种方法是编写自己的字段来包装组合 框,只有在确认选择后才会触发更改。

,

我假设您使用的是无缓冲的 Binder,带有 binder.setBean()?这有一个基本假设,即每次写入都直接发生在字段值更改之后,而不是在“确认”步骤之后。如果您想延迟写入(缓冲绑定),您应该在准备好后使用 binder.writeBean(bean)。请注意,这应该在不调用 setBean 的情况下完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。