web-dev-qa-db-fra.com

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

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

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

});
34
meleyal

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 voudrez probablement dire $(self.el).trigger('onScrollEnd'); à la place, ou peut-être appeler la fonction directement: self.scrollEnd().

24
Bart

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

25
Dmitry G.

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

self.bind('onScrollEnd', self.scrollEnd);
18
James Brown