web-dev-qa-db-ja.com

Backbone.jsビューでカスタムイベントをトリガー/バインドする方法は?

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

});
34
meleyal

OnScrollEndイベントは、ビューの上部要素にバインドされます。 scrollEndは、ビューのHTML要素がonScrollEndイベントを受け取ったときに呼び出されます。

ただし、要素ではなく、ViewオブジェクトでonScrollendイベントをトリガーしています。

そのため、代わりに$(self.el).trigger('onScrollEnd');を指定するか、関数を直接呼び出してください:self.scrollEnd()

24
Bart

明らかではないかもしれませんが、backbone.jsビューのeventプロパティはDOMイベントにのみ使用されます。カスタムイベントは 上記のジェームスブラウン としてバインドする必要があります。

25
Dmitry G.

関数を直接呼び出すか、initでこれを追加する必要があります。

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