今日のように完全に上書きするのではなく、継承されたinitialize
- class内から、親クラスのMyModel
メソッドを呼び出す必要があります。
どうすればこれができますか?
現在、私のコードは次のようになっています。
BaseModel = Backbone.Model.extend({
initialize: function(attributes, options) {
// Do parent stuff stuff
}
});
MyModel = BaseModel.extend({
initialize: function() {
// Invoke BaseModel.initialize();
// Continue doing specific stuff for this child-class.
},
});
MyModel = BaseModel.extend({
initialize: function() {
MyModel.__super__.initialize.apply(this, arguments);
// Continue doing specific stuff for this child-class.
},
});
試して
MyModel = BaseModel.extend({
initialize: function() {
BaseModel.prototype.initialize.apply(this, arguments);
// Continue doing specific stuff for this child-class.
},
});
私のモデル間で継承しようとしていたとき、これは私のために働いた:
MyModel.prototype.initialize.call(this, options);
http://documentcloud.github.com/backbone/#Model-extend からの参照
ありがとう。
なると思う
MyModel = BaseModel.extend({
initialize: function() {
this.constructor.__super__.initialize.call(this);
// Continue doing specific stuff for this child-class.
},
});
これはほとんど Super in Backbone の複製と思われるため、次のようなものが必要です。
Backbone.Model.prototype.initialize.call(this);
@wheresrhysに似ていますが、BaseModel.initializeが引数を必要とする場合、呼び出しの代わりにapplyを使用します。初期化時にバックボーンモデルに渡すことができる属性マップの処理を避けようとしますが、BaseModelが実際にビューまたはコレクションである場合は、オプションを設定できます。
var MyModel = BaseModel.extend({
initialize: function() {
this.constructor.__super__.initialize.apply(this, arguments);
// Continue doing specific stuff for this child-class.
},
});
これが多世代のcallSuperメソッドです。拡張クラスに追加するだけです。
callSuper: function (methodName) {
var previousSuperPrototype, fn, ret;
if (this.currentSuperPrototype) {
previousSuperPrototype = this.currentSuperPrototype;
// Up we go
this.currentSuperPrototype = this.currentSuperPrototype.constructor.__super__;
} else {
// First level, just to to the parent
this.currentSuperPrototype = this.constructor.__super__;
previousSuperPrototype = null;
}
fn = this.currentSuperPrototype[methodName];
ret = (arguments.length > 1) ? fn.apply(this, Array.prototype.slice.call(arguments, 1)) : fn.call(this);
this.currentSuperPrototype = previousSuperPrototype;
return ret;
}