2

假设我有一个 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 中 fetch() 模型,以便结果状态与服务器返回的完全一致,并且不包括旧的过时字段?

4

2 回答 2

5

我发现获得所需行为的一种方法是将此解析函数添加到相关模型中:

parse: function(resp) {
  for (var key in this.attributes) {
    if (resp[key] === undefined) {
      resp[key] = undefined;
    }
  }

  return resp;
}

如果来自服务器的响应缺少本地模型中的属性,它会将该键显式添加到具有未定义值的响应中。这会导致 fetch() 行为正确并将其从模型中删除。

于 2013-05-06T22:18:19.370 回答
0

如果你想 fetch 丢弃你的本地状态并在不合并的情况下获取服务器数据,那么使用 {reset: true} 选项。

来自文档:http ://backbonejs.org/#Collection-fetch

当模型数据从服务器返回时,它使用 set(智能)合并获取的模型,除非您传递 {reset: true},在这种情况下,集合将(有效)重置。

于 2013-05-06T21:24:41.447 回答