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调用。