Самый простой способ наследовать представление - это делать то, что другие люди уже предложили в комментариях:
var Pannel = Backbone.View.extend({
});
var PannelAdvanced = Pannel.extend({
});
Но, как вы отметили в своих комментариях, если у вас есть метод инициализации в Pannel, тогда он не будет вызван, если у вас также есть метод инициализации в PannelAdvanced, поэтому вы должны явно вызывать метод инициализации Pannel:
var Pannel = Backbone.View.extend({
initialize: function(options){
console.log('Pannel initialized');
this.foo = 'bar';
}
});
var PannelAdvanced = Pannel.extend({
initialize: function(options){
Pannel.prototype.initialize.apply(this, [options])
console.log('PannelAdvanced initialized');
console.log(this.foo); // Log: bar
}
});
Это немного уродливо, потому что если у вас много просмотров,унаследуйте от Pannel, тогда вам придется не забывать вызывать инициализацию Pannel для всех из них.Хуже того, если у Pannel сейчас нет метода инициализации, но вы решили добавить его в будущем, вам нужно будет перейти ко всем унаследованным классам в будущем и убедиться, что они вызывают инициализацию Pannel.Итак, вот альтернативный способ определения Pannel, так что ваши унаследованные представления не должны вызывать метод инициализации Pannel:
var Pannel = function (options) {
// put all of Panel's initialization code here
console.log('Pannel initialized');
this.foo = 'bar';
Backbone.View.apply(this, [options]);
};
_.extend(Pannel.prototype, Backbone.View.prototype, {
// put all of Panel's methods here. For example:
sayHi: function () {
console.log('hello from Pannel');
}
});
Pannel.extend = Backbone.View.extend;
// other classes inherit from Panel like this:
var PannelAdvanced = Pannel.extend({
initialize: function (options) {
console.log('PannelAdvanced initialized');
console.log(this.foo);
}
});
var pannelAdvanced = new PannelAdvanced(); //Log: Pannel initialized, PannelAdvanced initialized, bar
pannelAdvanced.sayHi(); // Log: hello from Pannel