我想将checkScroll()绑定到视图PhotoListView,以便可以从this.checkScroll()调用$(Window).scroll(),而无需先具有var self = this然后调用self.checkScroll()

问题:但是,绑定似乎不起作用,并且出现错误Uncaught TypeError: Object [object Window] has no method 'checkScroll'我是否错误地绑定了它?

视图

PhotoListView = Backbone.View.extend({
    el: '#photo_list',

    initialize: function() {
        _.bindAll(this, 'checkScroll');
        this.bind('checkScroll', this)

        $(window).scroll(function() {
            this.checkScroll();
        });
    },

    checkScroll: function() {
        console.log('checkScroll');
    }
});

最佳答案

是的,请尝试以下操作:

initialize: function() {
    _.bindAll(this, 'checkScroll');
    $(window).scroll(this.checkScroll)
},


_.bindAll将采用this.checkScroll并将其上下文固定为this,因此您可以直接将其作为处理程序传递。但是您通过使用匿名函数将其丢弃。

请注意,“绑定”有两种不同的概念:


将函数绑定到对象,以便无论如何调用该函数,它都将具有固定的this
将处理程序附加到元素的事件


_.bindAll是前者。


jsfiddle demo

09-20 11:33