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
返されます。false
true
model.get('selected');
回避策:サーバーから受信しないプロパティをコメントアウトします。
しかし、その場合、バックボーンから多くの便利な機能が失われます。これは Backbonejs 1.0 の回帰ですか、それともこのモデルを間違った方法で使用していますか?