骨干集合设置方法,确定模型是相同还是更改

时间:2013-06-14 17:44:57

标签: backbone.js backbone-collections

我一直在尝试解决这个问题,但也许比我更聪明的人已经知道了这一点。

我正在使用Backbone 1.0.0。我有一个由模型的fetch方法更新的集合;在模型的解析阶段,其中一个Ajax响应属性实际上是一个集合,我将它分开存储。我正在使用Backbone.Collection.set()方法来更新集合;它作为一个对象文字数组出现。

我在使用Backbone.Collection.set()方法时遇到了一些问题。每次,它似乎删除集合中的所有模型,然后将它们全部添加回来,即使它们都没有改变。我可以通过绑定到集合所有事件来查看所有事件。

Backbone如何确定模型是否相同,更改,删除或更新?我正在看源头,但并没有真正了解它。它是否在为每个模型寻找某种识别属性?

1 个答案:

答案 0 :(得分:1)

Collection.set方法通过将模型传递到Collection.get并查看它是否返回任何内容来确定模型中是否存在模型。

Collection.get使用模型id并查找现有匹配,如果cid没有id,则使用cid。由于set始终在内部生成,如果传递给id的对象没有set,则它永远不会找到匹配项,并且始终会被视为新匹配项。

如果存在现有模型,则使用新属性调用其Model.set方法。根据{{​​1}},如果新属性不等于旧属性,则会触发更改事件。