<a href="http://www.cnblogs.com/dojo-lzz/p/5361627.html">backbone源码分析(一)</a>
<a href="http://www.cnblogs.com/dojo-lzz/p/5374218.html">backbone源码分析(二)</a>
backbone中主要的业务逻辑位于model和collection,上一篇介绍了backbone中的model,这篇文章中将主要探讨collection的源码。
让我们先来看一下collection的构造函数:
接下来是在<code>set</code>, <code>add</code>, <code>remove</code> 中经常用到的<code>splice</code>函数:
下面我们来讲解<code>set</code>函数,<code>set</code>函数是collection中非常重要的一个函数,集增删改查与一身,处理了大量的核心业务逻辑:
collection中存储model的属性有两个:<code>this.models</code>数组和<code>_byid</code>键值对,所有的增删改查都需要对这两个属性进行更新。
set函数中主要做了以下几件事情:
将models参数处理成<code>model</code>的实例数组
处理options中的at参数,将其变成一个合理的数字
声明变量<code>set</code>, <code>toadd</code>, <code>tomerge</code>, <code>toremove</code>, <code>modelmap</code>
遍历models参数,找出其中应当更改或者加入到collection中的model并添加到上文的变量中
从collection的<code>this.models</code>中删除不存在本次set中的model
统一更改collection中的<code>this.models</code>数组
排序,但不要触发sort事件
统一处理事件: add、sort、update事件
像<code>add</code>函数内部就是利用<code>set</code>函数来处理的:
继<code>add</code>之后,另一个重要的操作就是remove,collection中的remove逻辑由<code>remove</code>, <code>_removemodels</code>, <code>_removereference</code> 三个函数完成
remove整体逻辑如下:
处理models参数
从<code>this.models</code>与<code>_byid</code>中删除model,触发collection的remove事件
断开model与collection的关联,移除model的绑定事件
触发collection的update事件
与<code>_removereference</code>对应的是<code>_addreference</code>,它的作用于<code>_removerenence</code>相反:
最后要提一下的是reset函数: