java - Vaadin Flow 恢复/撤消值更改而无需再次触发侦听器
问题描述
(使用 Vaadin 18)
我在打开确认对话框的组合框中有一个值更改侦听器,允许用户确认更改。因为这是在值更改侦听器中,所以该值在技术上已经更改。因此,当他们选择“否”时,我需要恢复该值。除了手动设置值之外,似乎没有任何 API 部分可以执行此操作。
但是当通过 setValue(...) 恢复时,侦听器会再次触发。我需要防止它再次开火。目前,我能够做到这一点的唯一方法是使用额外的“ignoreNextChange”布尔变量,它可以防止逻辑第二次运行。有没有更简单的方法来做到这一点?无论如何,我看不到添加一个在值更改之前触发的侦听器。
我不能简单地忽略所有非客户端更改,因为这会破坏活页夹。并且更改侦听器注册在侦听器内部不起作用,因为我还需要将其添加回来,这无论如何都会导致它触发。
解决方案
您可以正确地假设,您无法阻止更改在值更改处理程序中的传播(它是在事后发生的)。
您的主要选择是:
您只对“人为”更改(来自客户)做出反应。在 `ValueChangeEvent 中查看 isFromClient
或者将 UI 与操作分离(给用户一些 UI 以请求更改,再次询问,然后进行更改)——这可以通过多种方式完成。一种方法是编写自己的字段来包装组合框,并且只有在确认选择后才触发更改。
推荐阅读
- html - 在 JQuery 上更改只读或禁用
- android - React Native:Android 未正确设置宽度和高度 []
- python - 如何使程序遵循输入的顺序而不是键入的代码的顺序
- javascript - JavaScript 模块导入通配符 * 与显式导入
- java - Querydsl - 使用泛型时返回错误的类
- excel - 将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为
- android - android studio中的模拟器和USB调试问题
- vue.js - vue - v-日历 24 小时格式
- android - int bitrate = mediaformat.getInteger(MediaFormat.KEY_BIT_RATE) 正在返回 NullPointerException
- python - 皮威。CharField 更新时将单个字符串值保存为模型的实例字段中的元组