【发布时间】:2012-10-22 11:52:25
【问题描述】:
这是我之前提出的一个问题的编辑版本(该问题由 tbroyer 回答),为什么在尝试修改实体的 Editor 版本后,isDirty() 方法没有返回 true。我认为我对RequestFactory/EditorDriver 处理实体的理解是问题所在,而isDirty() 问题是一个红鲱鱼。我在这个问题的末尾留下了我原来的问题,但我的新问题是:
如何在代码中修改 EditorDriver 正在编辑的实体(代理)?显然,值会随着用户界面的变化而改变;但我不知道如何在“幕后”改变价值观。我的理解是对EditorDriver.edit() 的调用将创建代理对象的副本,随后对该副本的任何更改都将使用EditorDriver.flush() 应用于原始对象。但是EditorDriver.edit() 不返回对正在编辑的对象的引用(与RequestContext.edit() 不同,它确实返回对正在编辑的对象的引用)。
原始(消息灵通)问题:
我不明白为什么 EditorDriver.isDirty() 方法在以下情况下不返回 true(当从列表框中选择新的组织时调用以下 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(),这对我来说似乎很奇怪,但这是一个非常小的问题。
【问题讨论】:
标签: gwt requestfactory