我一直在尝试解决这个问题,但也许比我更聪明的人已经知道了这一点。
我正在使用Backbone 1.0.0。我有一个由模型的fetch方法更新的集合;在模型的解析阶段,其中一个Ajax响应属性实际上是一个集合,我将它分开存储。我正在使用Backbone.Collection.set()方法来更新集合;它作为一个对象文字数组出现。
我在使用Backbone.Collection.set()方法时遇到了一些问题。每次,它似乎删除集合中的所有模型,然后将它们全部添加回来,即使它们都没有改变。我可以通过绑定到集合所有事件来查看所有事件。
Backbone如何确定模型是否相同,更改,删除或更新?我正在看源头,但并没有真正了解它。它是否在为每个模型寻找某种识别属性?
答案 0 :(得分:1)
Collection.set
方法通过将模型传递到Collection.get
并查看它是否返回任何内容来确定模型中是否存在模型。
Collection.get
使用模型id
并查找现有匹配,如果cid
没有id
,则使用cid
。由于set
始终在内部生成,如果传递给id
的对象没有set
,则它永远不会找到匹配项,并且始终会被视为新匹配项。
如果存在现有模型,则使用新属性调用其Model.set
方法。根据{{1}},如果新属性不等于旧属性,则会触发更改事件。