個別のデータセットを返すのではなく、複数のモデルを作成することを検討する必要があります。そのデータには、イベントの処理と更新のためのバックボーンの力がありません。プロパティと値だけを持つ新しいオブジェクトを作成しています。
代わりに、各コンポーネントのモデルを作成してください
車には-エンジン、機能などがあります。
Engine = Backbone.Model.extend({
defaults: {
cylinders: 4,
horsepower: 180
}
});
Features = Backbone.Model.extend({
defaults: {
powerwindows: true,
airconditioning: true
}
});
次に、コンストラクターをオーバーライドして、機能セットを車のモデルにミックスインします
Car = Backbone.Model.extend({
defaults: function () {
return {
engine: new Engine(),
features: new Features()
};
},
constructor: function ( attrs ) {
attrs || ( attrs = {} );
if ( attrs.engine ) {
attrs.engine = new Engine( attrs.engine );
}
// etc
Backbone.Model.prototype.constructor.call( this, attrs );
}
});
もう1つのオプションは、車を作成し、機能を追加するいくつかのデコレータ関数を作成することですが、率直に言って、リストされている方法を好みます。これで、個別のコンポーネントに独自の変更をリッスンさせることができます
var car = new Car({
engine: { // props },
features: { //props }
});
car.get( 'features' ).on( 'change:powerwindows', // some function, this );
これらすべての背後にある真の力は、車の全体的な機能セットの責任を分離することです。車はすべての部品について心配する必要はありません。エンジンにエンジンのことを心配させ、機能に機能のことを心配させます。