gpt4 book ai didi

java - 如何监听 GWT 中 Editor 上的小部件触发的 ValueChangedEvents?

转载 作者:行者123 更新时间:2023-11-30 04:23:44 25 4
gpt4 key购买 nike

我的编辑器由多个文本框、复选框等组成。在编辑器本身上监听由其小部件触发的 ValueChangeEvents 的正确方法是什么?

我正在尝试理解 Developer's Guide - Editors但没有效果。

最佳答案

(G+ 帖子的扩展讨论)

您可能会考虑的一些想法:

  • 安慰剂保存按钮并不是一个糟糕的主意。在对话框中,“保存”通常意味着“保存并关闭”,这意味着它可能旁边有一个“取消并关闭”类型的按钮 - 如果没有进行任何更改,效果将是相同的。只需要代码就知道在不改变的情况下有区别。在文档中,“保存”只是刷新所有最近更改的一种方式,而且按钮后面的代码可以忽略它。也就是说,允许用户指示软件保存超出必要的内容可能不是一件坏事......
  • 编辑器框架的构建是为了允许访问者遍历驱动程序了解的编辑器树。这将使您能够构建一个访问者,该访问者可以询问树中的每个编辑器是否实现了 HasValueChangeHandlers,如果是,则添加一个处理程序。但是...
  • 当小部件逻辑上发生更改并具有新值时,ValueChangeEvents 就会关闭。这些更改几乎总是仅在用户模糊出字段后发生 - 如果光标仍位于用户已修改的唯一 TextBox 中,并且用户将鼠标悬停在保存按钮上,则它仍然会模糊,因为没有 ValueChangeEvent发生。您需要等待他们离开该字段,或者轮询 Activity 字段以查看它是否有新值,或者询问驱动程序它是否脏。请注意,并非所有小部件都能很好地进行轮询 - 有些小部件在仍处于焦点状态时没有可用值(例如任何 CellWidget),而另一些小部件则不理解 isDirty()(如 HasDataEditor)。

查找 HasValueChangeHandlers 的示例编辑器访问者:

driver.accept(new EditorVisitor(){
@Override
public <T> void endVisit(EditorContext<T> ctx) {
Editor<T> ed = ctx.getEditor();
if (ed instanceof HasValueChangeHandlers) {
@SuppressWarnings("unchecked")
HasValueChangeHandlers<T> hasHandlers = (HasValueChangeHandlers<T>) ed;
hasHandlers.addValueChangeHandler(new ValueChangeHandler<T>() {
@Override
public void onValueChange(ValueChangeEvent<T> event) {
// TODO update button
// consider comparing event.getValue() with ctx.getFromModel()
// though that requires seeing which editors have changes...
}
});
}
}
});

更改轮询示例:

Timer t = new Timer(){
@Override
public void run() {
boolean hasChanges = driver.isDirty();
// TODO update button with the hasChanges value
}
};
t.schedule(500);
// Don't forget to cancel() this when done, both on save and cancel!

关于java - 如何监听 GWT 中 Editor<?> 上的小部件触发的 ValueChangedEvents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16385766/

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