今天我们继续来说说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
这个名字确实比较准确