型号:
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);
做上述工作,以及我需要它的工作,但它真的很糟糕。这很糟糕,因为每次我们进行新的添加和同步时,每次在此页面加载时调用add和sync时,都会调用JSON 1次。因此,如果添加3个项目,则会获得6个toJSON调用(第一个为1,第二个为2,第三个为3)。而且,它不是那么干净。我还注意到toJSON
调用了主干this.attributes
,第一次创建是正确的。第二次它就像this.attributes == backbone或者其他东西。非常非常奇怪。它拥有Backbone的所有方法。这就像克隆做了一个深刻的克隆或其他东西。
答案 0 :(得分:2)
您的Backbone版本(v0.9.9)与localstorage附加组件的版本不匹配。请务必从Backbone repo获取最新版本的localstorage附加组件,它将解决此问题。
答案 1 :(得分:1)
归功于Derick Bailey,我最终通过恢复到Backbone的0.9.2来修复它。我尝试使用最新的localStorage插件似乎没有解决它。也许我使用的是其他来源?我正在使用这个开发: