gpt4 book ai didi

javascript - Backbone.js 慢速服务器保存()响应覆盖本地更改的属性

转载 作者:行者123 更新时间:2023-11-29 20:04:22 24 4
gpt4 key购买 nike

我在 Backbone 模型上发生了一些奇怪的行为 - 我在调用 save() 和服务器响应之间设置的属性被丢弃,取而代之的是服务器响应(这只是呼应了保存的属性)。

这是 Backbone 应有的行为方式吗?当服务器稍有延迟时,这让我的应用程序看起来真的很疯狂 - 它用旧属性覆盖我的 currentScreen 属性,向后导航屏幕。这是我的代码:

Interview = Backbone.Model.extend({
urlRoot: "/interviews",
defaults: {
"currentScreen": 0
}
});

这是我的 Jasmine/Sinon.JS 测试,描述了我的预期(它失败了,Expected 0 to equal 1.):

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);
});

});
});

最佳答案

是的,这就是它应该的工作方式。您的服务器具有规范的数据集,因此无论真实值是什么,它都会覆盖客户端状态。

如果您不希望或不需要服务器在保存后更新客户端,则只需不返回任何更改的属性——只需使用一个空对象:{}

关于javascript - Backbone.js 慢速服务器保存()响应覆盖本地更改的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12846835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com