Как вызвать / связать пользовательские события в представлениях Backbone.js? - PullRequest
34 голосов
/ 21 марта 2011

У меня есть Backbone View, который использует iScroll для реализации слайд-шоу.

iScroll публикует событие onScrollEnd, но я не могу связать / подписаться на него в представлении:

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);
    }

});

Ответы [ 3 ]

25 голосов
/ 25 декабря 2011

Это может быть неочевидно, но свойство event в представлениях backbone.js используется только для событий DOM. Пользовательские события должны быть связаны как Джеймс Браун, упомянутый выше .

24 голосов
/ 21 марта 2011

Ваше событие onScrollEnd связано с верхним элементом представления; scrollEnd будет вызван, когда HTML-элемент представления получил событие onScrollEnd.

Но вы запускаете событие onScrollend для своего объекта View, а не элемента.

Так что вы, вероятно, хотите сказать $(self.el).trigger('onScrollEnd'); вместо этого или, возможно, вызвать функцию напрямую: self.scrollEnd().

18 голосов
/ 06 ноября 2011

Вы должны вызвать функцию напрямую или в своем init, добавить это:

self.bind('onScrollEnd', self.scrollEnd);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...