我认为我正在做一些非常标准的事情。
模型:
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);
做上述有点工作,并且我需要它来工作,但这真的很糟糕。这很糟糕,因为每次我们执行新的添加和同步时,每次在此页面加载时调用添加和同步时,它都会调用 toJSON 1 次。因此,如果添加 3 个项目,您将获得 6 个 toJSON 调用(第一个调用 1 个,第二个调用 2 个,第三个调用 3 个)。而且,也不是很干净。我还注意到在toJSON
主干的调用中this.attributes
第一次是正确的。第二次就像 this.attributes == 骨干之类的。非常非常奇怪。它具有 Backbone 的所有方法。就好像克隆做了一个深度克隆什么的。