私はかなり一般的なモデルとそのモデルのコレクション (以下を参照) を持っており、一連のビューの基礎として扱っています。いくつかのビューでは、モデルの 1 つを選択すると ('selected' 属性を介して) アクションが生成され、クライアント側だけで選択を追跡できるようにする必要があります。
ただし、バックボーンでこれを行うクリーンな方法はないようです。クライアント上のモデルに追加/変更された属性は、サーバーに同期されます。イベントがその属性で発生した{silent : yes}
ときにビューで変更をトリガーする必要があるため、その属性を変更するときに使用できません。change
これを行うために私が思いついた唯一の方法は、save
関数を上書きすることですBackbone.Model
私の質問: 私が見逃しているクライアント側のみの属性を持つ方法はありますか、それとも私のアプローチは、私が見ていない他の方法で構造的に欠陥がありますか?
var CSEvent = Backbone.Model.extend({
idAttribute: "_id",
urlRoot : '/api/events',
defaults: {
title : "",
type : "Native",
repeatOrOneTime : "OneTime",
selected : false
}
});
var CSEventCollection = Backbone.Collection.extend({
model: CSEvent,
url: '/api/events',
getSelectedEvent : function() {
return this.find(function(csevent) { return csevent.get('selected') === true; });
},
selectEvent : function(eventId) {
this.deselectEvent();
this.get(eventId).set({selected : true});
},
deselectEvent : function() {
this.getSelectedEvent().set({selected : false});
}
});