【问题标题】:Grouping model attributes - backbone分组模型属性 - 主干
【发布时间】:2012-06-20 21:50:33
【问题描述】:

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

例如,如果我有一个汽车模型,并且我想将有关引擎的所有信息分组,以便我可以将这些属性传递给视图?类似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')};
}

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

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

    而是为每个组件制作模型

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

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

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

    【讨论】:

    • 作为附录,您可能应该重写 parse 方法而不是构造函数,以防您决定从服务器更新整个汽车,并在重写的构造函数中传递 { parse: true } 作为选项。它将以类似的方式运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多