1

Backbonejs を 1.0 にアップグレードした後、サーバーからコレクションをフェッチすると、応答しないデフォルト プロパティが強制されます。

より具体的には、 jsfiddleで検証できるこのテストを作成しました。

デフォルトのプロパティを持つバックボーン モデル定義があるとします。プロパティtextは JSON でサーバーから受け取ることができ[{ "text": "updated", "id" : 1}]、プロパティselectedはクライアント側で保持されます。

var Model = Backbone.Model.extend({
    defaults: function () {
        return {
            text: 'default',
            selected: false
        };
    }    
});

この設定を使用してサーバーからデータをフェッチすると、正しく機能します。このモデルを次のようにバックボーン コレクションに追加するとします。

var Models = Backbone.Collection.extend({
    url: '/json/',
    model: Model
});

新しいコレクション インスタンスを作成し、以下を設定しますfetch

var models = new Models();
models.fetch({
    update : true
});

その後、コレクション内の 1 つのモデルを取得し、selectedプロパティを trueに変更します。

var model = models.get(1);
model.set('selected', true);

コレクションを 2 回目に呼び出すと、応答にそのような値がなかったとしてもfetch、バックボーンは以前に変更されたプロパティをデフォルト値にクリアします。false

models.fetch({
    update : true
});
model = models.get(1);

値を取得すると、以前の set の代わりにselected返されます。falsetrue

model.get('selected');

回避策:サーバーから受信しないプロパティをコメントアウトします。

しかし、その場合、バックボーンから多くの便利な機能が失われます。これは Backbonejs 1.0 の回帰ですか、それともこのモデルを間違った方法で使用していますか?

4

1 に答える 1

1

Backbone.js 1.0 には回帰があり、現在のマスターでは修正されています。

終了した問題

于 2013-07-12T02:27:56.163 に答える