我有一个拖放功能,在我的网络应用程序。当用户在拖放之后释放鼠标时,对象的位置就会使用模型上主干的save()方法保存到服务器上。当服务器响应时,它使用返回的属性在模型上触发一个set()。但是,在服务器处理请求时,用户可能已经再次将对象拖到另一个位置。这会导致问题,因为来自服务器的响应现在将覆盖浏览器中对象的设置。
是否有一种方法可以防止主干在保存()之后从服务器获得响应后执行set()?
发布于 2013-10-16 00:49:48
我现在使用以下解决方案:
重写模型的默认解析方法:
Backbone.Model.prototype.parse = function(resp, options) {
if(options.parse)
return resp;
};
现在,您可以使用save方法,将属性'parse‘设置为false,以防止ajax响应覆盖当前值:
MyModel.save({}, { parse: false });
发布于 2013-09-11 08:09:22
以前做系统时有类似的用例,尽管这更麻烦,因此我们需要真正覆盖模型set()
函数。尽管在这种情况下,有几种相对简单的方法可用。
您可以重写模型解析()函数。也可以在abort()
调用返回的jqXHR对象上调用save()
。
发布于 2013-08-21 09:31:16
查看“等待”选项,默认情况下应该将其设置为false,这意味着您的模型字段应该在调用save()之后立即设置。您可以设置{ wait :true}以使主干在设置更新的模型字段值之前等待服务器答复。
从您描述的行为来看,在您的应用程序中,等待选项被设置为true。
详细信息:http://backbonejs.org/#Model-save
需要记住的另一件重要的事情是,主干只设置从被调用的webservice返回的更新字段的子集,因此如果不返回任何字段,则不会设置任何字段。
https://stackoverflow.com/questions/18363397
复制