GWT EditorDriver代理对象修改

时间:2012-10-20 00:17:30

标签: gwt requestfactory

这是我之前曾询问过的问题的编辑版本(并且tbroyer回答了)在尝试修改isDirty()true方法未返回Editor的原因实体的版本。我认为我对RequestFactory / EditorDriver实体处理的理解是问题,isDirty()问题是一个红色的鲱鱼。我在这个问题的最后留下了原来的问题,但我的新问题是:

如何在代码中修改EditorDriver正在编辑的实体(代理)?显然,由于用户界面的变化,值会发生变化;但我不知道如何在幕后改变价值观。我的理解是,对EditorDriver.edit()的调用将创建代理对象的副本,随后对该副本的任何更改将使用EditorDriver.flush()应用于原始对象。但EditorDriver.edit()不会返回对正在编辑的对象的引用(与RequestContext.edit()不同,后者会返回对正在编辑的对象的引用。)

原始(不明智的)问题:

我不明白为什么在以下情况下EditorDriver.isDirty()方法没有返回true(当从列表框中选择新的Org时,会调用以下onOrgSelectedEvent()方法):

private IOrgProxy _org;
...
/**
 * Loads the currently selected Org into the editor. 
 */
@Override
public void onOrgSelectedEvent(final OrgSelectedEvent orgSelectedEvent) {
  IOrgProxy org = _clientFactory.getCache().getOrgCache().getOrg(orgSelectedEvent.getOrgId());
  _orgRequestContext = _clientFactory.getRequestFactory().newOrgRequestContext();
  _org = _orgRequestContext.edit(org);
  _orgEditorDriver.edit(_org, _orgRequestContext);
  _org.setName(_org.getName() + " (edit)");
  if (_orgEditorDriver.isDirty()) {
    _org.setName(org.getName());
  }
}

当我在setName()调用上放置断点时,我看到第一个调用更改了可编辑Org对象中的名称,但是从未到达第二个setName()调用(即,_orgEditorDriver.isDirty()返回false)。

作为一个附带问题,我似乎很奇怪EditorDriver.edit()方法不返回可编辑的代理对象,而且我必须调用RequestContext.edit(),但这是一个非常小的问题。

1 个答案:

答案 0 :(得分:3)

isDirty之后为什么edit会成立?很明显,用户没有时间做任何改变。

isDirty将子编辑器的当前值与其原始值进行比较,它不关心对象是否更改:如果将对象借给编辑器,则隐式赋予它对编辑对象的控制权(对于编辑过的属性)。