Le moyen le plus simple d'hériter d'une vue est de faire ce que d'autres personnes ont déjà suggéré dans les commentaires :
var Pannel = Backbone.View.extend({
});
var PannelAdvanced = Pannel.extend({
});
Mais comme vous l'avez noté dans vos commentaires, si vous avez une méthode d'initialisation dans Pannel, elle ne sera pas appelée si vous avez également une méthode d'initialisation dans PannelAdvanced, vous devez donc appeler la méthode d'initialisation de Pannel explicitement :
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
}
});
C'est un peu laid car si vous avez beaucoup de Views qui héritent de Pannel, vous devrez vous souvenir d'appeler l'initialize de Pannel à partir de chacun d'eux. Pire encore, si Pannel n'a pas de méthode initialize maintenant mais que vous décidez de l'ajouter à l'avenir, vous devrez alors vous rendre dans toutes les classes héritées à l'avenir et vous assurer qu'elles appellent la méthode initialize de Pannel. Voici donc une autre façon de définir Pannel pour que les vues héritées n'aient pas besoin d'appeler la méthode initialize de 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
0 votes
Cela fonctionne exactement de la même manière -
Panel.extend({ ... })
0 votes
J'ai mon Panel = Backbone.View.extend() puis j'ai advancedPanel = Panel.extend() mais lorsque je fais un journal de la console pour une variable dans la méthode initialize du Panel à l'intérieur d'advancedPanel, il apparaît comme indéfini.
0 votes
Puis-je simplement appeler Panel.extend() sans instancier Panel au préalable.