Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT EditorDriver代理对象修改_Gwt_Requestfactory - Fatal编程技术网

GWT EditorDriver代理对象修改

GWT EditorDriver代理对象修改,gwt,requestfactory,Gwt,Requestfactory,这是一个编辑版本的问题,我以前问过(tbroyer也回答过)这个问题,关于在试图修改实体的编辑器版本后,isDirty()方法为什么没有返回true。我认为我对RequestFactory/EditorDriver实体处理的理解是问题所在,而isDirty()问题只是一个转移视线的问题。我在这个问题的末尾留下了我原来的问题,但我的新问题是: 如何在代码中修改由EditorDriver编辑的实体(代理)?很明显,值会随着用户界面的改变而改变;但我不知道如何在“幕后”改变价值观。我的理解是,调用Ed

这是一个编辑版本的问题,我以前问过(tbroyer也回答过)这个问题,关于在试图修改实体的
编辑器版本后,
isDirty()
方法为什么没有返回
true
。我认为我对
RequestFactory
/
EditorDriver
实体处理的理解是问题所在,而
isDirty()
问题只是一个转移视线的问题。我在这个问题的末尾留下了我原来的问题,但我的新问题是:

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

原始(不知情)问题:

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

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


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

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


isDirty
将子编辑器的当前值与它们的原始值进行比较,不管对象是否更改:如果您将对象借给编辑器,您会隐式地赋予它对已编辑对象的控制权(对于已编辑的属性)。为什么在
edit
之后,
isDirty
才是真的?显然,用户没有时间做任何更改


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

调用
RequestContext.edit()
是否创建代理对象的副本?调用
EditorDriver.edit()
创建另一个副本?如果是这样,我不需要调用
RequestContext.edit()
;但是如何修改编辑器拥有的对象?
RequestContext.edit()
创建代理的副本
RequestFactoryEditorDriver.edit()
调用
RequestContext.edit()
,它还不会创建新对象:对于给定的
stableId()
,在
RequestContext
中只有一个可编辑代理实例。在
edit()
flush()
之间,只能通过其
编辑器更改属性;如果没有
编辑器
,您可以独立于
编辑器驱动程序
“编辑周期”进行更改。非常感谢,托马斯。。。我非常感谢您的帮助和您的博客文章,我想我现在明白了:如果我更改了“name”属性的值,那么我需要使用
name.setText()
name
是屏幕上的字段);我无法使用
\u org.setName()
更改它。但是,如果我想标记任何已查看的记录,则仍然存在问题,无论用户是否实际更改了值。如果数据库中有表示“ViewDate”和“ViewUserId”的列,那么我会将它们引入实体中;但是这些字段将没有
编辑器
,并且值将在幕后更改;但是我认为
isDirty()
将返回
false
,因此我需要另一种方法来知道实体需要刷新和激发(发送回服务器)。我是否应该使用
RequestContext.isChanged()
而不是
EditorDriver.isDirty()
?对
RequestContext.edit()的调用也是如此
是否创建代理对象的副本?调用
EditorDriver.edit()
创建另一个副本?如果是这样,我不需要调用
RequestContext.edit()
;但是如何修改编辑器拥有的对象?
RequestContext.edit()
创建代理的副本
RequestFactoryEditorDriver.edit()
调用
RequestContext.edit()
,它还不会创建新对象:对于给定的
stableId()
,在
RequestContext
中只有一个可编辑代理实例。在
edit()
flush()
之间,只能通过其
编辑器更改属性;如果没有
编辑器
,您可以独立于
编辑器驱动程序
“编辑周期”进行更改。非常感谢,托马斯。。。我非常感谢您的帮助和您的博客文章,我想我现在明白了:如果我更改了“name”属性的值,那么我需要使用
name.setText()
name
是屏幕上的字段);我无法使用
\u org.setName()
更改它。但是,如果我想标记任何已查看的记录,则仍然存在问题,无论用户是否实际更改了值。如果数据库中有表示“ViewDate”和“ViewUserId”的列,那么我会将它们引入实体中;但是
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());
  }
}