2012-01-06 62 views

回答

4

通過執行這一行:

var myCollection = new Collection([{id: 'smith'}]); 

您有一個模型中創建新的集合。在構造函數中傳遞的所有模型都將被添加到集合中。每個添加的模型都經過驗證。

詳情:

  1. Backbone.Collection構造呼籲this.reset()source)。
  2. .reset()將靜靜地將所有模型添加到集合中(source)。
  3. .add()將爲每個型號調用內部._add()source)。
  4. 內部._add()將調用.prepareModel這是檢查模型是否有效(source)。

更新(基於編輯的問題):

model.validate只執行如果模型不是Backbone.Modelsource)實例。

因此,如果您創建使用

var myCollection = new Collection([{id: 'smith'}]); 

集合則該模型是Object實例。但是,如果您使用:

var myCollection = new Collection([ new Model({id: 'smith'}) ]); 

那麼該模型是Backbone.Model的實例並驗證被跳過。

+0

是這就是我認爲,所以我'myCollection.reset([{id:'smith'}]);' - http://jsfiddle.net/5a3k/QSeH6/17/ ..但驗證仍然會觸發.. – zack 2012-01-06 00:44:00

+0

@zack:在答案中查看詳細信息。構造函數調用正在添加和驗證模型的'.reset()'。如果你自己調用'.reset()',那麼你也觸發了驗證 - 只跳過細節列表中的第一步。 – kubetz 2012-01-06 00:54:28

+0

謝謝,對於措辭不佳的問題表示歉意 - 請參閱編輯 – zack 2012-01-06 01:02:06