这是我之前曾询问过的问题的编辑版本(并且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(),但这是一个非常小的问题。
答案 0 :(得分:3)
isDirty
之后为什么edit
会成立?很明显,用户没有时间做任何改变。
isDirty
将子编辑器的当前值与其原始值进行比较,它不关心对象是否更改:如果将对象借给编辑器,则隐式赋予它对编辑对象的控制权(对于编辑过的属性)。