2011-03-21 6 views
33

J'ai une vue Backbone qui utilise iScroll pour implémenter un diaporama.Comment déclencher/lier des événements personnalisés dans des vues Backbone.js?

iScroll publie un événement onScrollEnd, mais je ne peux pas sembler lier/abonnez-vous à l'intérieur de la vue:

App.Views.Scroller = Backbone.View.extend({ 

    events: { 
     'onScrollEnd' : 'scrollEnd' 
    }, 

    initialize: function(){ 
     var self = this; 
     this.scroller = new iScroll('content-scroller', { 
      onScrollEnd: function() { 
       self.trigger('onScrollEnd'); 
      } 
     });  
    }, 

    scrollEnd: function(e){ 
     // never called :(
     console.log(e); 
    } 

}); 
+0

J'ai également essayé d'étendre l'objet scroller avec Backbone.Events – meleyal

Répondre

24

Votre événement onScrollEnd est lié à l'élément supérieur de la vue; scrollEnd sera appelé lorsque l'élément HTML de la vue a reçu un événement onScrollEnd. Mais vous déclenchez un événement onScrollend sur votre objet View, pas sur l'élément.

Donc, vous voulez probablement dire $(self.el).trigger('onScrollEnd'); à la place, ou peut-être appeler la fonction directement: self.scrollEnd().

+0

J'ai fini par appeler la fonction directement. Semble vaincre le point mais ça marche :) – meleyal

+1

Ou moins verbeux 'self. $ El.trigger ('onScrollEnd');'. – VisioN

18

Vous devez appeler la fonction directement ou dans votre init, ajoutez ceci:

self.bind('onScrollEnd', self.scrollEnd); 
25

Il pourrait ne pas être évident, mais event propriété dans les vues de Backbone.js est utilisé uniquement pour les événements DOM. Les événements personnalisés doivent être liés en tant que James Brown mentioned above.

+2

Pour moi, cette réponse était tout aussi importante que la réponse acceptée. Merci. –

Questions connexes