这是我之前问过的一个问题的编辑版本(并且那个 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(),这对我来说似乎很奇怪,但这是一个非常小的问题。