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