我在做一些非常標準的事情,我想。創建模型時的骨幹無限循環
型號:
app.model.Todo = Backbone.Model.extend({
defaults: {
task: ''
, completed: 0
, attachments: []
, note: ''
}
});
收藏:
var Todos = Backbone.Collection.extend({
model: app.model.Todo
, localStorage: new Store('Todos')
, incomplete: function() {
return this.filter(function (todo) {
return !todo.get('completed')
});
}
, complete: function() {
return this.filter(function (todo) {
return todo.get('completed')
});
}
, comparator: function(todo) {
return todo.get('order');
}
});
app.collection.Todos = new Todos();
然後,如果我只是做:
app.collection.Todos.create({task: 'hi'});
app.collection.Todos.create({task: 'hi'});
第二屆一個永遠不會奏效。我得到一個無限循環(Firefox上的遞歸和Chrome上的stack_overflow)。
我真的很茫然。我也評論了所有事件。
顯示它旋轉失控在這裏骨幹:
// Return a copy of the model's `attributes` object.
toJSON: function(options) {
return _.clone(this.attributes);
},
更新:如果我添加id: 0
或任何ID到模型中的錯誤將停止,但如果我給它一個自定義的ID(即new Date().getTime()
錯誤再次發生這就像每當我創造一個獨特的項目它炸燬
更新2:。
var todo = new gator.model.Todo({task: actionbarVal});
gator.collection.Todos.add(todo);
gator.collection.Todos.sync('create', todo);
做上述還挺工作,併爲我所需要它的作品,但它真的很糟糕。這很糟糕,因爲每次我們做一個新的添加並將其同步調用到JSON時,每次添加和同步都會在此頁面加載時調用一次。所以,如果你添加3個項目,你會得到6到JSON調用(第一個爲1,第二個爲2,第三個爲3)。而且,它不夠乾淨。我還注意到在的主幹呼叫toJSON
與創建是第一次是正確的。第二次是像this.attributes ==主幹或其他東西。非常非常奇怪。它擁有Backbone的所有方法。就好像克隆做了一個很深的克隆或者其他東西。
我怕我找不到'爲**型號create' **在[文件](http://backbonejs.org/#Collection-創造),它僅存在**集合**。 – Cyclone
如果你在集合上調用create,似乎可以工作:http://jsfiddle.net/ambiguous/8Szgv/ PS:如果你的'defaults'中有一個數組(或其他可變對象),那麼你應該使用默認值功能而不是對象。 –
@Cyclone該死的,我的錯。那是一種類型。我的意思是一個集合。固定。 –