如何调用骨干中父模型的默认方法

时间:2014-06-03 01:02:49

标签: javascript inheritance backbone.js superclass

我创建了一个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)

2 个答案:

答案 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。同样,这在您的情况下并不重要,但可能对其他人有用。