0

我最近开始学习主干,想知道在主干模型中对模型属性进行分组的最佳方法是什么?我正在考虑有一个专门的视图来处理模型属性的一个子集。

例如,如果我有一个汽车模型,并且我想将有关引擎的所有信息分组,以便我可以将这些属性传递给视图?就像是car.engine_info

Car = Backbone.Model.extend({
    initialize: function() {
        this.engine_info = this._set_engine_info();
    }
    _set_engine_info: function() {
        return {displacement:this.get('displacement'), horsepower: this.get('horsepower')};
}
4

1 回答 1

3

您应该考虑制作多个模型,而不是返回一组单独的数据。该数据在其背后没有用于事件处理和更新的主干力量。您正在创建一个只有属性和值的新对象。

而是为每个组件制作模型

汽车具有 - 发动机、功能等。

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 );

所有这一切背后的真正力量是分离汽车整体功能集的责任。一辆车不应该担心它的所有零件。让引擎操心引擎,让功能操心功能。

于 2012-06-21T02:29:00.093 回答