3

我有一种编辑器丢弃对其属性所做的更改的方法吗?这在客户端。没有毅力。

我有:

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

我在 ListEditor 上使用此编辑器,因为您知道您的列表中有一个编辑器列表

 ListEditor<ClaseProxy, ClaseEditor>

如果用户创建一个,没关系,然后如果用户编辑它。我有一个保存或取消选项,我保存好,只需隐藏编辑器,所做的更改就可以了。

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

是的,我可以将起始值存储在字符串上,然后在 texbox 上使用 setValue() 进行恢复。但是还有其他方法(Editor API)可以防止这种情况发生吗?

谢谢

4

2 回答 2

0

如果您使用的是SimpleBeanEditorDriver,则可以对该方法进行新调用edit,而无需flush先调用。

该类SimpleBeanEditorDriver从 bean 读取到 editors on edit,并从 editors 读取到 bean on 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);
}
于 2014-03-31T20:30:07.373 回答
-1

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

于 2012-04-13T17:51:02.647 回答