我的编辑器由几个文本框、复选框等组成。在编辑器本身上侦听由其小部件触发的 ValueChangeEvents 的正确方法是什么?
我试图理解Developer's Guide - Editors但无济于事。
我的编辑器由几个文本框、复选框等组成。在编辑器本身上侦听由其小部件触发的 ValueChangeEvents 的正确方法是什么?
我试图理解Developer's Guide - Editors但无济于事。
(来自 G+ 帖子的扩展讨论)
您可能会考虑一些想法:
要查找的示例编辑器访问者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!