2012-04-13 94 views
3

我有一种编辑器可以放弃对其属性所做的更改吗?这在客户端。没有残余。GWT编辑器如何丢弃更改

我:

public class ClaseEditor extends PopupPanel implements Editor<ClaseProxy> { 
    @UiField ValidatedTextBox tema; 
    @UiField ValidatedTextBox catedratico; 
} 

我使用这个编辑器在ListEditor如u知道你

ListEditor<ClaseProxy, ClaseEditor> 

如果用户创建一个,它的还好有编辑列表,那么如果用户编辑它。我有一个保存或取消选项,我保存好,只需隐藏编辑器,所做的更改都可以。

但在用户单击取消,如果在属性上有一些更改编辑器刷新(lazely),更改为代理。

是的,我可以将起始值存储在一个字符串,然后用setValue()恢复在texboxes上。但是还有其他一些方法(编辑器API)阻止了这一点?

谢谢

回答

0

是的。在取消按钮上,执行一个fire()而不会建立任何请求。编辑器从不影响原始代理,它是不可变的。刷新只会给你一个副本(除非你使用的是RequestFactoryEditorDriver,那么它会返回你发送到driver.edit(proxy,ctx)的上下文。没有请求的fire()会清除编辑代理副本,如果用户想再次编辑它不会如果您使用的是SimpleBeanEditorDriver得到,它已经被editted错误。

+0

EditorDriver.flush()不返回与SimpleBeanEditorDriver副本,它要求所有subeditors到刷新它们的变化返回到原来的对象。或者我误解了'给你一个副本'的意思? – 2012-04-13 18:35:05

+0

在简单的bean驱动程序中,刷新为您提供了代理的可编辑副本。原始代理与您第一次检索代理时相同。术语冲洗使得它看起来像它可以将编辑后的变化刷新回原始代理,但它不会。 – Deanna 2012-04-13 18:57:42

+0

SimpleBeanEditorDriver不承担代理服务器,因此它可以在普通的bean上使用,这意味着它不能复制它所使用的模型。 RequestFactoryEditorDriver在将值传递给编辑器之前确实会运行context.edit - 也许您正在考虑这一点? – 2012-04-13 22:03:37

0

,你可以做的edit方法一个新的呼叫,而无需调用flush第一。

SimpleBeanEditorDriver类从豆读入编辑edit,编辑转入豆瓣flush

如果您不想恢复所有编辑人员,但只有其中一人,请记得在每次接受的编辑人员更改时致电flush,以便能够恢复到最后的flush点。请注意,flush调用是本地调用,不一定必须与对持久层的调用相对应。

实施例代码

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); 
}