5

バックボーン ローカル ストレージを使用していて、奇妙な動作が発生しています。

定義、インスタンス化、およびフェッチされたモデルとコレクションがあります。

MyModel = Backbone.Model.extend({
        localStorage: new LocalStore('example-myModels')
        //note: LocalStore = Backbone.LocalStore -> https://github.com/jeromegn/Backbone.localStorage
});

MyCollection = Backbone.Collection.extend({
        model : MyModel,
        localStorage: new LocalStore('example-myModels')
});

var myCollection = new MyCollection();
myCollection.fetch(...);

このコレクションは、リストとしてユーザーに表示されます。ユーザーはコレクションにアイテムを「追加」することができ、最終的に次のコードになります。

var newModel = new MyModel();
newModel.save(newModelAttributes, {
    success: function(newlySavedModel) {
        myCollection.add(newlySavedModel);
    }
);

この時点で、myCollection に新しく追加されたモデルがあり、localStorage データベースにレコードが正常に作成されていることがわかります。

LocalStorage の事前保存:

ここに画像の説明を入力

保存後の LocalStorage:

ここに画像の説明を入力

ユーザーがレコードを追加した後の次のステップは、リストに戻ることです。この時点で、コレクションが再度フェッチされます。

myCollection.fetch();

これで、 myCollectionには新しいレコードが含まれなくなりました。何回フェッチしても、新しいレコードは取得されません - localStorage データベースで確認できますが。Collection の新しいインスタンスを作成してフェッチしようとしましたが、同じ結果が得られます。ブラウザをリロードすると、期待どおりに新しいレコードが表示されます。何が起こっているのか誰にも分かりますか?ここで根本的な何かが欠けているような気がします...

問題を再現する実行例は、http: //jsbin.com/iyorax/2/editから入手できます (コンソールが表示されていることを確認し、[Run with JS] をクリックします)。

前もって感謝します!

4

3 に答える 3

1

私は Backbone.localstorage で動作するアプリケーションを持っています。私にとってうまくいくのは、最初にモデルをコレクションに追加してから、モデルに保存を呼び出すことです。このような。

var newModel = new MyModel();
myCollection.add(newModel)
newModel.save();

100% 確実ではありませんが、モデルは保存されていますが、コレクションは保存されておらず、インデックスが更新されておらず、fetch を呼び出した時点で更新されていないコレクションを取得している可能性があります。

それが役立つことを願っています。

于 2013-06-13T21:44:22.207 に答える
0

モデルがコレクションに存在しない唯一の理由は、 ID が重複しているためです。

モデルに IdAttribute が定義されていません。それが問題になることもあります。

于 2013-06-13T22:31:10.203 に答える