1

私はかなり標準的なことをしていると思います。

モデル:


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 のすべてのメソッドが含まれていました。まるでクローンがディープクローンか何かをしたかのようでした。

4

2 に答える 2

2

Backbone のバージョン (v0.9.9) と localstorage アドオンのバージョンが一致していません。Backbone リポジトリから localstorage アドオンの最新バージョンを入手してください。これにより、この問題が解決されます。

于 2012-12-18T20:52:15.917 に答える
1

Derick Bailey のおかげで、Backbone の 0.9.2 に戻すことで最終的に修正しました。最新の localStorage アドオンを使用しようとしても、問題が解決されなかったようです。多分私は別のソースを使用していましたか?私はこれの開発を使用していました:

https://github.com/jeromegn/Backbone.localStorage

于 2012-12-22T22:37:06.713 に答える