私はかなり標準的なことをしていると思います。
モデル:
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'});
2番目のものは決して機能しません。無限ループが発生します (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 つ目に 2 つ、3 つ目に 3 つ)。また、それほどきれいではありません。toJSON
また、create を使用したバックボーンの呼び出しがthis.attributes
最初に正しかったことに気付きました。2回目はこんな感じでした.attributes == backboneとか。とても、とても奇妙です。Backbone のすべてのメソッドが含まれていました。まるでクローンがディープクローンか何かをしたかのようでした。