Backbone原始碼分析(三)

發表於2016-04-22

Backbone原始碼分析(一)
Backbone原始碼分析(二)

Backbone中主要的業務邏輯位於Model和Collection,上一篇介紹了Backbone中的Model,這篇文章中將主要探討Collection的原始碼。

讓我們先來看一下Collection的建構函式:

接下來是在set, add, remove 中經常用到的splice函式:

下面我們來講解set函式,set函式是Collection中非常重要的一個函式,集增刪改查與一身,處理了大量的核心業務邏輯:

Collection中儲存model的屬性有兩個:this.models陣列和_byId鍵值對,所有的增刪改查都需要對這兩個屬性進行更新。
set函式中主要做了以下幾件事情:

  • 將models引數處理成Model的例項陣列
  • 處理options中的at引數,將其變成一個合理的數字
  • 宣告變數set, toAdd, toMerge, toRemove, modelMap
  • 遍歷models引數,找出其中應當更改或者加入到Collection中的model並新增到上文的變數中
  • 從Collection的this.models中刪除不存在本次set中的model
  • 統一更改Collection中的this.models陣列
  • 排序,但不要觸發sort事件
  • 統一處理事件: add、sort、update事件

add函式內部就是利用set函式來處理的:

add之後,另一個重要的操作就是remove,Collection中的remove邏輯由remove, _removeModels, _removeReference 三個函式完成

remove整體邏輯如下:

  • 處理models引數
  • this.models_byId中刪除model,觸發Collection的remove事件
  • 斷開model與Collection的關聯,移除model的繫結事件
  • 觸發Collection的update事件

_removeReference對應的是_addReference,它的作用於_removeRenence相反:

最後要提一下的是reset函式:

相關文章