Backbone.js 如何在第一次初始化时显示模型子类的所有属性?

Backbone.js 如何在第一次初始化时显示模型子类的所有属性?,backbone.js,Backbone.js,问题 首次初始化子模型时,只有子模型的默认值设置为属性 初始化第二个(以及所有后续)子级时,子级的属性将显示子级及其父级的默认值 第一次初始化的子对象的属性: var child1 = new Child(); 儿童1.属性: hobby: "doing nothing" age: 24 occupation: "student" 同一子类的属性,第二次初始化: var child2 = new Child(); child2属性: age: 24 hobby: "doing n

问题

首次初始化子模型时,只有子模型的默认值设置为属性

初始化第二个(以及所有后续)子级时,子级的属性将显示子级及其父级的默认值

第一次初始化的子对象的属性:

 var child1 = new Child();
儿童1.属性:

 hobby: "doing nothing"
 age: 24
 occupation: "student"
同一子类的属性,第二次初始化:

var child2 = new Child();
child2属性:

age: 24
hobby: "doing nothing"
language: "english"
lname: "smith"
location: "belgium"
name: "john"
occupation: "student"
问题

为什么在第一次初始化子模型时,没有将所有默认值(子模型和父模型)都设置为属性


因为我必须在
中显示
主干.Collection
,每个模型的属性都可以通过每个
  • 中的html表单进行配置。但是由于这个问题,我无法获得集合中第一个模型的所有属性

    当第一个对象在其
    初始化
    方法中实例化时,您正在修改子类的
    默认值
    对象。此时,Backbone.Model构造函数已经使用了
    defaults
    来填充该对象的属性,因此它只会影响后续的实例化

    看看主干。型号:

      var Model = Backbone.Model = function(attributes, options) {
        var defaults;
        var attrs = attributes || {};
        options || (options = {});
        this.cid = _.uniqueId('c');
        this.attributes = {};
        _.extend(this, _.pick(options, modelOptions));
        if (options.parse) attrs = this.parse(attrs, options) || {};
        if (defaults = _.result(this, 'defaults')) {
          attrs = _.defaults({}, attrs, defaults);
        }
        this.set(attrs, options);
        this.changed = {};
        this.initialize.apply(this, arguments);
      };
    
    initialize
    是设置默认值后的最后一步,因此在该点修改
    默认值
    对当前对象没有任何作用

    要使其按您所需的方式工作,请在声明类后修改
    默认值
    ,而不是在
    初始化
    期间:

    Child.prototype.defaults = _.defaults(Child.prototype.defaults, Parent.prototype.defaults);
    

    非常感谢:),我错过了这一部分,只是假设在所有其他部分之前先调用initialize。花几个小时浏览所有代码。你救了我更多!!!
    Child.prototype.defaults = _.defaults(Child.prototype.defaults, Parent.prototype.defaults);