GWT如何在编辑器上放弃更改

GWT如何在编辑器上放弃更改,gwt,editor,Gwt,Editor,有没有一种方法可以让编辑器放弃对其属性所做的更改?这是在客户端。没有持久性 ListEditor<ClaseProxy, ClaseEditor> 我有: public class ClaseEditor extends PopupPanel implements Editor<ClaseProxy> { @UiField ValidatedTextBox tema; @UiField ValidatedTextBox catedratico; } Lis

有没有一种方法可以让编辑器放弃对其属性所做的更改?这是在客户端。没有持久性

 ListEditor<ClaseProxy, ClaseEditor>
我有:

public class ClaseEditor extends PopupPanel implements Editor<ClaseProxy> {
  @UiField ValidatedTextBox tema;
  @UiField ValidatedTextBox catedratico;
}
 ListEditor<ClaseProxy, ClaseEditor>
公共类claseditor扩展了popupanel实现编辑器{
@UiField ValidatedTextBox tema;
@UiField ValidatedTextBox Catedraco;
}
我在ListEditor上使用此编辑器,因为您知道在您的编辑器中有一个编辑器列表

 ListEditor<ClaseProxy, ClaseEditor>
ListEditor
如果用户创建了一个,它就可以了,然后如果用户编辑它。我有一个保存或取消选项,我保存确定,只是隐藏编辑器和所做的更改是确定的

 ListEditor<ClaseProxy, ClaseEditor>
但是,在用户单击“取消”时,如果属性发生了一些更改,编辑器将刷新(lazely)以更改代理

 ListEditor<ClaseProxy, ClaseEditor>
是的,我可以将起始值存储在字符串上,然后在文本框上使用setValue()还原。但还有其他方法(编辑器API)可以防止这种情况

 ListEditor<ClaseProxy, ClaseEditor>

谢谢

是的。在“取消”按钮上,在不生成任何请求的情况下执行fire()。编辑器不会影响原始代理,它是不可变的。刷新只会给您一个副本(除非您使用的是RequestFactoryEditorDriver,否则它会返回您通过
驱动程序发送到其中的上下文。编辑(代理,ctx)
。fire()如果用户希望再次编辑,则无需请求即可清除编辑代理副本。如果您使用的是
SimpleBeaneEdit或Driver
,则无需先调用
flush
,即可在
edit
方法上执行新调用

 ListEditor<ClaseProxy, ClaseEditor>
SimpleBeaneEditorDriver
类在
edit
上从bean读入编辑器,在
flush
上从编辑器读入bean

 ListEditor<ClaseProxy, ClaseEditor>
如果您不想还原所有编辑器,但只还原其中一个,请记住在每次接受的编辑器更改时调用
flush
,以便能够还原到最后一个
flush
点。请注意,
flush
调用是本地的,不必与对持久层的调用相对应

 ListEditor<ClaseProxy, ClaseEditor>
示例代码

 ListEditor<ClaseProxy, ClaseEditor>
private Bean currentObject;

/**
 * Start editing the given object.
 */
public void edit(Bean object) {
  this.currentObject = object;
  this.driver.edit(object);
}

/**
 * Call this every time an editor is in a consistent state.
 * (e.g. onBlur event if validation succeeds)
 */
private void save() {
  this.driver.flush(); // saves editors' state into currentObject
}

/**
 * Call this to cancel changes on all editing editors.
 * (e.g. onBlur event if validation fails)
 */
private void revert() {
  this.driver.edit(currentObject); // reloads currentObject into editors
}

/**
 * Stores all pending changes to the server.
 * Remember to validate all editors.
 */
public void commit() {
  Bean object = this.driver.flush();
  Server.persist(object);
}

EditorDriver.flush()不使用SimpleBeanEditorDriver返回副本,它会要求所有子编辑器将其更改刷新回原始对象。或者我误解了“给你一个副本”的意思吗?在simple beans驱动程序中,flush会给你代理的可编辑副本。原始代理与你第一次检索它时相同。术语flush使我SimpleBeaneEditorDriver似乎不会将已编辑的更改刷新回原始代理,但它不会。SimpleBeaneEditorDriver不会假定代理,以便可以在普通bean上使用,这意味着它无法复制它所使用的模型。RequestFactoryEditorDriver会在将值传递给编辑器之前运行context.edit-也许您正在思考相反,你是对的,我不是在想SimpleBeaneEditorDriver。虽然我在想编辑器。虽然我同时使用编辑器和RequestFactoryEditorDriver,但我从来没有使用过SimpleBeaneEditorDriver。所以我不知道flush对SimpleBeaneEditorDriver有什么作用。如果我错了,请纠正我,但flush()on Editor返回已编辑代理的副本,RequestFactoryEditorDriver返回您在其上调用edit()的上下文。
Editor
不支持任何方法实际上,它只是一个标记接口。由于GWT中缺少一般反射,因此很难通用地克隆所有对象(或者至少是一种高效、通用的方式)。委托是围绕每个编辑器构建的,这些委托只与子编辑器或编辑器接口实现的特定方法(如ValueAwareEditor具有setValue)对话。如果需要,RequestFactoryEditorDelegate.ensureMutable(T)执行context.edit调用。