0

这是我之前问过的一个问题的编辑版本(并且那个 tbroyer 回答了)关于为什么在尝试修改实体的版本后该isDirty()方法没有返回。我认为我对实体/处理的理解是问题所在,而问题是转移注意力。我在这个问题的末尾留下了我原来的问题,但我的新问题是:trueEditorRequestFactoryEditorDriverisDirty()

如何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(),这对我来说似乎很奇怪,但这是一个非常小的问题。

4

1 回答 1

3

为什么isDirty之后会是真的edit?显然,用户没有时间进行任何更改。

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

于 2012-10-20T14:51:11.277 回答