2011-03-21 18 views
33

Tengo una Vista de red troncal que usa iScroll para implementar una presentación de diapositivas.¿Cómo desencadenar/vincular eventos personalizados en las vistas de Backbone.js?

iScroll publica un evento onScrollEnd, pero me parece que no puede obligar/suscribirse a él dentro de la Vista:

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

También intenté extender el objeto scroller con Backbone.Events – meleyal

Respuesta

24

Su caso está obligado a onScrollEnd elemento superior de la vista; Se llamará a scrollEnd cuando el elemento HTML de la vista recibió un evento onScrollEnd.

Pero está activando un evento onScrollend en su objeto View, no en el elemento.

En su lugar, probablemente desee decir $(self.el).trigger('onScrollEnd');, o tal vez llamar a la función directamente: self.scrollEnd().

+0

Terminé simplemente llamando a la función directamente. Parece que no funciona, pero funciona :) – meleyal

+1

O menos verbose 'self. $ El.trigger ('onScrollEnd');'. – VisioN

18

Debe llamar a la función directamente o en su inicio, añadir lo siguiente:

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

Puede que no sea obvio, pero event propiedad en vistas Backbone.js se utiliza solamente para eventos DOM. Los eventos personalizados deben vincularse como James Brown mentioned above.

+2

Para mí, esta respuesta fue tan importante como la respuesta aceptada. Gracias. –

Cuestiones relacionadas