我正在使用带有RequestFactory的GWT 2.4,但对我来说一切都不清楚。
在this文章中,作者写了一篇关于当我们使用一个RequestContext
实例的实体代理时想要重用(edit()
)这个实体代理与其他{{1}实例的情况}}:
无法编辑它,因为它已经分配了requestContext。 如果要更改它,则必须检索此实体的实例 从服务器再次
但是当我执行这段代码时,我没有例外:
RequestContext
我运行此版本时会弹出autor描述的问题(异常):
RequestContext newRequest1 = factory.myRequest();
newRequest1.edit(proxy);
RequestContext newRequest2 = factory.myRequest();
newRequest2.edit(proxy);
所以似乎只有RequestContext newRequest1 = factory.myRequest();
MyProxy edited = newRequest1.edit(proxy);
RequestContext newRequest2 = factory.myRequest();
newRequest2.edit(edited);
返回的可编辑副本与RequestContext实例直接相关。
在这种情况下,在我的编辑视图中保留(不可编辑/冻结)代理的一个实例并且每次用户点击“编辑”按钮I edit()
时,新的RequestContext会出现错误吗?或者我应该每次都获得新的代理实例?
获取新的代理实例对我来说似乎有点尴尬,但我想重用一个代理实例可能会导致一些与向服务器发送更改增量相关的问题?
所以重新解释一下这个问题:将一个代理实例重用为多个edit()
是一个好习惯吗?
答案 0 :(得分:1)
编辑同一个代理两次(或更多)是没有问题的,只要一次只有一个可编辑的实例(你的第一个代码片段应该抛出;如果不是那么它就是一个bug;如果你不这样做它可以工作不要在RequestContext
和已编辑的代理上保留引用。
请注意,RequestFactory仅将修改后的属性发送到服务器,但它通过将不可编辑的实例传递给edit()
进行区分来实现。因此,您应尽量使用最新的实例,以使服务器端/持久数据尽可能接近客户端数据(看起来很明显,但可能导致一些意外练习:如果您在客户端上看到 foo 但在服务器上有 bar ,那么您将在服务器端保留栏,直到您将客户端的属性修改为 foo )