使骨干模型获取丢弃丢失的字段

时间:2013-05-06 18:57:56

标签: backbone.js

假设我有一个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中获取()模型,以便生成的状态正是从服务器返回的状态,并且不包括旧的过时字段?

2 个答案:

答案 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:   是的,在这种情况下,集合将被(有效地)重置。