假设我有一个Backbone模型,当调用fetch()时(对于特定模型,而不是整个集合),它从服务器获取:
{ a: "val-1", b: "val-2" }
稍后,我再次在模型上调用fetch(),这次服务器返回:
{ b: "val-x", c: "val-y" }
此时,我希望我的模型具有此状态,因为这是服务器提供的最新状态:
{ b: "val-x", c: "val-y" }
但是,我的Backbone模型改为使用此状态:
{ a: "val-1", b: "val-x", c: "val-y" }
如何在Backbone中获取()模型,以便生成的状态正是从服务器返回的状态,并且不包括旧的过时字段?
答案 0 :(得分:5)
我发现获得所需行为的一种方法是将此解析函数添加到相关模型中:
parse: function(resp) {
for (var key in this.attributes) {
if (resp[key] === undefined) {
resp[key] = undefined;
}
}
return resp;
}
如果来自服务器的响应缺少本地模型中的属性,则它会将该键显式添加到具有未定义值的响应中。这会导致fetch()正常运行并将其从模型中删除。
答案 1 :(得分:0)
如果您希望fetch丢弃本地状态并在不合并的情况下获取服务器数据,请使用{reset:true}选项。
来自文档:http://backbonejs.org/#Collection-fetch
当模型数据从服务器返回时,它使用set to (智能地)合并获取的模型,除非你通过{reset: 是的,在这种情况下,集合将被(有效地)重置。