Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 分组模型属性-主干_Backbone.js - Fatal编程技术网

Backbone.js 分组模型属性-主干

Backbone.js 分组模型属性-主干,backbone.js,Backbone.js,我最近开始学习主干网,想知道在主干网模型中对模型属性进行分组的最佳方法是什么?我正在考虑使用一个专门的视图来处理模型属性的子集 例如,如果我有一个汽车模型,我想把所有关于引擎的信息分组,这样我就可以把这些属性传递给一个视图?类似于car.engine\u info Car = Backbone.Model.extend({ initialize: function() { this.engine_info = this._set_engine_info(); }

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

例如,如果我有一个汽车模型,我想把所有关于引擎的信息分组,这样我就可以把这些属性传递给一个视图?类似于
car.engine\u 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')};
}

<>你应该考虑制作多个模型,而不是返回一个单独的数据集。这些数据不会有主干网支持的事件处理和更新能力。您正在创建一个仅具有属性和值的新对象

而是为每个组件制作模型

汽车有发动机、特点等

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

所有这些背后的真正力量是将汽车整体功能集的责任分开。汽车不必担心所有的零件。让发动机操心发动机,让特性对特性产生担忧。

< P>你应该考虑多个模型,而不是返回一个单独的数据集。这些数据不会有主干网支持的事件处理和更新能力。您正在创建一个仅具有属性和值的新对象

而是为每个组件制作模型

汽车有发动机、特点等

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:true}
。它将以类似的方式运行。作为附录,您可能应该重写解析方法而不是构造函数,以防您决定从服务器更新整个car,并且作为选项,在重写的构造函数过程中
{parse:true}
。它将以类似的方式运行。