34 votes

Comment déclencher / lier des événements personnalisés dans les vues Backbone.js?

J'ai une vue dorsale qui utilise iScroll pour implémenter un diaporama.

iScroll publie un événement onScrollEnd , mais je n'arrive pas à le lier / souscrire à 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);
    }

});
 

25voto

Dmitry G. Points 390

Cela n’est peut-être pas évident, mais la propriété event dans les vues backbone.js n’est utilisée que pour les événements DOM. Les événements personnalisés doivent être liés comme James Brown mentionné ci-dessus .

24voto

Bart Points 481

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 aura reçu un événement onScrollEnd.

Mais vous déclenchez un événement onScrollend sur votre objet View, pas l'élément.

Donc, vous voudrez probablement plutôt dire $(self.el).trigger('onScrollEnd'); , ou peut-être appeler directement la fonction: self.scrollEnd() .

18voto

James Brown Points 364

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

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

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