1
我必須做一些愚蠢的事情,或者可能缺少骨幹文檔的一些關鍵部分,但我無法理解爲什麼Model.validate函數在以這種方式初始化新集合時觸發:http://jsfiddle.net/5a3k/QSeH6/ ..任何想法,錯了嗎?backbone-js:我該如何靜靜地初始化一個新的Collection?
編輯:改變標題
我必須做一些愚蠢的事情,或者可能缺少骨幹文檔的一些關鍵部分,但我無法理解爲什麼Model.validate函數在以這種方式初始化新集合時觸發:http://jsfiddle.net/5a3k/QSeH6/ ..任何想法,錯了嗎?backbone-js:我該如何靜靜地初始化一個新的Collection?
編輯:改變標題
通過執行這一行:
var myCollection = new Collection([{id: 'smith'}]);
您有一個模型中創建新的集合。在構造函數中傳遞的所有模型都將被添加到集合中。每個添加的模型都經過驗證。
詳情:
this.reset()
(source)。.reset()
將靜靜地將所有模型添加到集合中(source)。.add()
將爲每個型號調用內部._add()
(source)。._add()
將調用.prepareModel
這是檢查模型是否有效(source)。更新(基於編輯的問題):
model.validate
只執行如果模型不是Backbone.Model
(source)實例。
因此,如果您創建使用
var myCollection = new Collection([{id: 'smith'}]);
集合則該模型是Object
實例。但是,如果您使用:
var myCollection = new Collection([ new Model({id: 'smith'}) ]);
那麼該模型是Backbone.Model
的實例並驗證被跳過。
是這就是我認爲,所以我'myCollection.reset([{id:'smith'}]);' - http://jsfiddle.net/5a3k/QSeH6/17/ ..但驗證仍然會觸發.. – zack 2012-01-06 00:44:00
@zack:在答案中查看詳細信息。構造函數調用正在添加和驗證模型的'.reset()'。如果你自己調用'.reset()',那麼你也觸發了驗證 - 只跳過細節列表中的第一步。 – kubetz 2012-01-06 00:54:28
謝謝,對於措辭不佳的問題表示歉意 - 請參閱編輯 – zack 2012-01-06 01:02:06