今天我们继续来说说Backbone MVC中的 M,如果说前面介绍的Backbone.Model像是数据库中的一条记录的抽象的话,那么今天要聊的Backbone.Collection 就像是由若干条Backbone.Model组成的一个数据库表,其api和使用方法和Backbone.Model相似,主要是对models集合进行操作,以下为Backbone.Collection提供的API:

我们可以看到很多api和Backbone.Model 的方法是相同的,主要是用于操作数据,进行数据定位等等,方法有:
- set:作为所有数据操作的基类方法,通过options确定具体的操作,主要是对models 集合进行add,remove,merge等操作,默认操作是将传入的models替换原有的models,不进行合并
- add:封装了set方法,传入的配置默认是
remove:false,将存入的models添加到原有的models中去 - remove:删除传入的models,如果传入的model不存在,则为空操作,删除之后触发
remove事件 - reset : 删除原来的models集合 ,将传入的models进行设置,不触发
add/remove事件,在完成之后触发reset事件 - get : 通过传入的参数返回特定的model(参数可以是obj/id/cid);
下面我们来看看几个主要的API:
set
collection.set(models, [options])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | |
set方法中通过对options的remove,add,merge进行设置,进行不同的行为操作,如果remove是true的话,其值将被设置入order中,在line:79 进行整个models的替换,如果是remove是false,则将set 的值加入toAdd中。Backbone.Collection中很多方法都是以set为基础方法的,如 add方法:
1 2 3 | |
_addReference
_addReference 方法为内部方法,主要用于在model和对应的collection建立关系,在collection的_byId集合中加入对应cid和id的model映射,将model的collection属性设置为当前的collection 。
1 2 3 4 5 6 | |
除了set方法,其他的方法和Backbone.Model中的方法从逻辑,机制都差不多,都是一个 操作 --> 触发事件的过程。只有少数差别,比如fetch方法 ,在options中有个reset配置,可以对获取的数据进行一个覆盖操作。而Backbone.Collection中没有save方法,取而代之的是一个create方法,就是调用了model中的save方法,但是细细推敲,在collection中使用create这个名字确实比较准确