骨干保存没有设置回调

我在我的网络应用程序中有一个拖放功能。 当用户在拖放之后释放鼠标时,使用模型上的Backbone的save()方法将对象的位置保存到服务器。 当服务器响应时,它会使用返回的属性在模型上触发set()。 但是,在服务器处理请求的时候,用户可能已经再次将对象拖动到不同的位置。 这会导致问题,因为服务器的响应现在会覆盖浏览器中对象的设置。

有没有办法阻止Backbone在执行save()之后从服务器获得响应之后执行set()?


虽然之前做系统的时候有过类似的用例,但是更麻烦,因此我们需要真正覆盖set()函数。 虽然在这种情况下可以使用一些相对较简单的方法。

您可以重写模型parse()函数。 或者,您可以在save()调用返回的jqXHR对象上调用abort()

http://api.jquery.com/jQuery.ajax/#jqXHR


查看“等待”选项,默认情况下它应该设置为false,这意味着应该在调用save()后立即设置模型字段。 您可以设置{wait:true}在设置更新的模型字段值之前让骨干等待服务器回复。

从您描述的行为看,您的应用程序中的wait选项设置为true。

更多细节:http://backbonejs.org/#Model-save

另一个需要记住的重要事情是骨干网仅设置从被调用的Web服务返回的更新字段的子集,所以如果您不返回任何内容,则将被设置。


在实际设置之前, Model.save将会使用相同的options参数调用Model.parse

您可以使用自定义标志(让我们说position: true )来调用Model.save ,指出Model.parse可以放弃服务器返回的内容。

例如,假设你的坐标是xy

var M = Backbone.Model.extend({
    parse: function(data, options)  {
        if (options && options.position)
            data = _.omit(data, 'x', 'y');

        return data;
    }
});

var m = new M();
m.save({x: 10, y:10}, {position: true});
m.save({x: 20, y:20}, {position: true});

和一个演示http://jsfiddle.net/nikoshr/YwC7q/

链接地址: http://www.djcxy.com/p/67075.html

上一篇: Backbone save without set on callback

下一篇: backbone can't parse json