您应该考虑制作多个模型,而不是返回一组单独的数据。该数据在其背后没有用于事件处理和更新的主干力量。您正在创建一个只有属性和值的新对象。
而是为每个组件制作模型
汽车具有 - 发动机、功能等。
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 );
}
});
另一种选择是创建汽车并创建一些添加功能的装饰器功能,但坦率地说,我更喜欢列出的方法。现在你可以让单独的组件监听它们自己的变化
var car = new Car({
engine: { // props },
features: { //props }
});
car.get( 'features' ).on( 'change:powerwindows', // some function, this );
所有这一切背后的真正力量是分离汽车整体功能集的责任。一辆车不应该担心它的所有零件。让引擎操心引擎,让功能操心功能。