0

データをローカルに保存するための「LocalStore」オブジェクトがあります。これは Lawnchair オブジェクトに基づいています。

var LocalStore = function(name) {
    var that = this;
    that.name = name;

    that.lawnchair = Lawnchair({ name: that.name }, function(store) {
        this.before('save', function(record){
            console.log("saving " + that.name);
            console.log(record);
        });

        this.after('save', function(record){
            console.log("saved " + that.name);
            console.log(record);
            that.getData(function(records){
                console.log("now it's this");
                console.log(records);
            });
        });
    });

    that.getData = function(callback) {
        that.lawnchair.get(that.name, callback);
    };
};

LocalStore は、次_.extendのメソッドで (Underscore.js ライブラリから) 拡張されます。

save: function(collection, callback) {
        this.lawnchair.save({ key:this.name, value: collection }, function(record) {
            callback(record);
        });
    }

このコードは、Backbone.js Collection オブジェクトを Lawnchair に更新するために使用されます。ユーザー コレクションに対して初めて「保存」を実行すると、正しく保存され、オブジェクトが単純なキーと値のペアであり、値が配列であることが示されます。

コードの後半で、ユーザーがデフォルト プロジェクトを選択したときに、ユーザー コレクションを変更し、ユーザーの更新された「defaultProjectId」を使用して「保存」を再度呼び出します。コードはエラーなしで実行されますが、after('save')Lawnchair のコードは次
のことを示していrecordます。
-getDataデータベースから最新のものを取得するメソッドは、単純な配列の値を持つキーと値のペアとして表示され、defaultProjectId が正しく設定されていません。

どうしようか途方に暮れています。「lawnchair.save」を呼び出すだけでレコードが更新されるはずですが、そうではありません。

4

1 に答える 1

1

このjsfiddleを試していただけますか?

http://jsfiddle.net/QUgtg/1/

私はあなたのコードを再作成しました。バックボーン コレクションの代わりに、オブジェクトの配列を渡しています。これはうまくいくようです。ログ出力は Firebug で確認できます。

独自の拡張コードを使用してsave(). 正直なところ、プロトタイプにプロパティを追加するだけでなく、そのようにしたい理由がわかりません。あなたのコードはその点で異なる場合があります。

私が投稿したものがあなたの側で機能する場合、そのコードを変更して、何が違うのかを示すことができますか? 可能であれば、jsfiddle で問題を再現します...

于 2012-07-16T18:23:36.003 に答える