我创建了一个ParentModel和其他几个扩展ParentModel的模型。每个ChildModel都有一些比ParentModel更多的属性。
我想调用ParentModel的defaults方法并获取该JSON并添加一些其他属性,并从默认的ChildModel返回修改后的对象。
这是我的代码:
var ParentModel = Backbone.Model.extend({
defaults: function() {
return {
name: '',
description: '',
ruleType: '',
creationDate: ''
};
}
});
var ChildModel = ParentModel.extend({
defaults: function() {
//Q: How to get the defaults from ParentModel and add one more property to json
}
});
var c = new ChildModel({});
但是我无法弄明白如何调用它正在扩展的类的默认方法(ParentModel)?
答案 0 :(得分:1)
_.extend({extraProps:here},ParentModel.prototype.defaults)
答案 1 :(得分:1)
Backbone允许您通过__super__
属性访问父级的原型。
所以你可以像这样调用父方法:
this.constructor.__super__.parentMethod.apply( this, arguments )
所以在你的情况下:
var ChildModel = ParentModel.extend({
defaults: function() {
return _.extend(
{ extraProps: 'here' },
this.constructor.__super__.defaults.apply( this, arguments )
);
}
});
说明:
__super__
是一个“静态”属性,而不是原型属性,因此必须通过this.constructor.__super__
而不是this.__super__
来访问它。apply()
,而不是直接调用defaults()
。这允许我们做两件事。首先,它允许我们设置this
在父defaults()
方法中将具有的值。这在您的情况下并不重要,但可以在重写其他父方法时使用。然后我们使用apply()
的第二个参数传递传递给子函数的任何arguments
。同样,这在您的情况下并不重要,但可能对其他人有用。