Backbone 的 Collection 相关的方法里面,还有一个 set 方法。这可以更聪明的把模型添加到集合里面。用这个方法,去指定一个模型的列表,在列表里面的模型,如果在原来的集合里面没有的话,就会添加到集合里面,如果在集合里面已经存在了,就会去合并或者叫更新这个模型 ... 如果在原来集合里面的模型不在这个要添加的模型的列表里面,就会从集合里面删除掉这些模型。
不过这些行为,我们也可以使用 set 方法的选项参数去控制。下面,我们去看一下这个 set 方法。
先去创建一个集合 ... 在这个集合里,可以添加一个模型 .. note1
var noteCollection = new NoteCollection([note1])
然后,我们再用 set 这个方法 ... 指定一个模型的列表 ... note1, note2 ...
noteCollection.set([note1, note2])
现在,noteCollection 这个集合里面就是包含 note1 还有 note2 这两个模型 ... 因为 note1 这个模型已经在集合里存在了,所以,会去合并这个模型,相当于是使用 add 方法添加模型的时候,把 merge 选项设置成 true 的作用。
另外的 note2 这个模型,在集合里还不存在,所以,就会把这个模型添加到集合里面。
再试一下 ... 这次这个模型的列表是 note2 ,还有 note3
noteCollection.set([note2, note3])
现在,集合里面已经有了 note2 这个模型,这样就会去合并这个模型 ... 集合里没有 note3 这个模型,所以会把它添加到集合里面 ... 集合里面的 note1 这个模型,并没有在这个 set 方法的模型列表里 ... 这样就会从集合里面,删除掉这个 note1 模型 ...
通过 set 方法的选项参数,我们可以控制它的行为 ... 如果,我们不想从集合里面删除掉在 set 方法的列表里面不存在的模型 .. .这样,可以把 remove 这个选项设置成 false ... 类似的还有 merge 和 add 选项 ..
noteCollection.set([note1], {remove: false})
这回 ... noteCollection 这个集合里面,会包含 note1,note2 ,还有 note3 这几个模型 ...
虽然 note2,还有 note3 ,不包含在用 set 方法指定的模型列表里面,因为我们把 remove 这个选项的值设置成了 false .. 所以,也就不会删除掉这些不包含在模型列表里面的模型了。