Javascript Backbone.js slow server save()响应覆盖本地更改的属性
在主干模型中出现了一些奇怪的行为—在调用Javascript Backbone.js slow server save()响应覆盖本地更改的属性,javascript,backbone.js,Javascript,Backbone.js,在主干模型中出现了一些奇怪的行为—在调用save()和服务器响应之间设置的属性被抛出,取而代之的是服务器响应(它只是回显保存的属性) 这是脊梁骨的行为方式吗?当服务器稍微滞后时,我的应用程序看起来真的很疯狂——它用旧的属性覆盖了我的currentScreen属性,该属性向后导航屏幕。这是我的密码: Interview = Backbone.Model.extend({ urlRoot: "/interviews", defaults: { "currentScre
save()
和服务器响应之间设置的属性被抛出,取而代之的是服务器响应(它只是回显保存的属性)
这是脊梁骨的行为方式吗?当服务器稍微滞后时,我的应用程序看起来真的很疯狂——它用旧的属性覆盖了我的currentScreen
属性,该属性向后导航屏幕。这是我的密码:
Interview = Backbone.Model.extend({
urlRoot: "/interviews",
defaults: {
"currentScreen": 0
}
});
下面是我的Jasmine/Sinon.JS测试,它描述了我的预期(它失败了,因为预期0等于1。
):
是的,这就是它的工作原理。您的服务器具有规范的数据集,因此它将使用任何真实值覆盖客户机状态
如果您不希望或不需要服务器在保存后更新客户端,那么就不要返回任何更改的属性——只需使用空对象:
{}
谢谢!我的错误是返回render:json=>@interview
(Rails后端),它显然返回所有模型属性。我很荣幸骨干创造者回答了我的问题。:-)
describe("Interview model", function() {
beforeEach(function() {
this.interview = new Interview;
});
describe("saving with a slow server response", function() {
beforeEach(function() {
this.server = sinon.fakeServer.create();
});
afterEach(function() {
this.server.restore();
});
it('should not overwrite locally changed attributes on server response', function() {
this.server.respondWith("PUT", "/interviews/1",
[200, { "Content-Type": "application/json" },
'{"id":1,"currentScreen":0}']);
this.interview.set({id: 1, currentScreen: 0});
this.interview.save();
this.interview.set({currentScreen: 1}); // user navigates to next screen
this.server.respond(); // return fake response after currentScreen changed locally
expect(this.interview.get('currentScreen')).toEqual(1);
});
});
});