116 votes

Backbone View: hériter et étendre les événements du parent

La documentation de Backbone indique:

La propriété events peut également être définie comme une fonction qui renvoie un hash d'événement, pour faciliter la définition par programmation de vos événements, ainsi que pour les hériter des vues parentes.

Comment héritez-vous les événements de vue d'un parent et les étendre?

Parent View

 var ParentView = Backbone.View.extend({
   events: {
      'click': 'onclick'
   }
});
 

Enfant Voir

 var ChildView = ParentView.extend({
   events: function(){
      ????
   }
});
 

191voto

soldier.moth Points 8996

Un moyen est:

 var ChildView = ParentView.extend({
   events: function(){
      return _.extend({},ParentView.prototype.events,{
          'click' : 'onclickChild'
      });
   }
});
 

Un autre serait:

 var ParentView = Backbone.View.extend({
   originalEvents: {
      'click': 'onclick'
   },
   //Override this event hash in
   //a child view
   additionalEvents: {
   },
   events : function() {
      return _.extend({},this.originalEvents,this.additionalEvents);
   }
});

var ChildView = ParentView.extend({
   additionalEvents: {
      'click' : ' onclickChild'
   }
});
 

Pour vérifier si les événements sont fonction ou objet

 var ChildView = ParentView.extend({
   events: function(){
      var parentEvents = ParentView.prototype.events;
      if(_.isFunction(parentEvents)){
          parentEvents = parentEvents();
      }
      return _.extend({},parentEvents,{
          'click' : 'onclickChild'
      });
   }
});
 

79voto

34m0 Points 1710

La réponse soldier.moth est bonne. En simplifiant davantage, vous pouvez simplement faire ce qui suit

 var ChildView = ParentView.extend({
   initialize: function(){
       _.extend(this.events, ParentView.prototype.events);
   }
});
 

Ensuite, définissez simplement vos événements dans les deux classes de la manière habituelle.

12voto

jermel Points 1389

Vous pouvez également utiliser la méthode pour éviter de créer l’objet vide .

10voto

Shuhei Kagawa Points 1014

Si vous utilisez CoffeeScript et définissez une fonction , vous pouvez utiliser .

2voto

Koen. Points 3570

Version courte de la dernière suggestion de @soldier .moth :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X