2014-03-03 49 views
2

我有一個工作滾動mixin(你可以看到這個要點)。Debounce使用Ember.run.debounce滾動

http://jsbin.com/wofaj/4

App.Scrolling = Em.Mixin.create({ 
    bindScrolling: function() { 
    var onScroll; 
    var _this = this; 

    var scrollFunc = function(){ 
     return _this.scrolled(); 
    }; 

    onScroll = scrollFunc; 

    $(document).bind('touchmove', onScroll); 
    $(window).bind('scroll', onScroll); 
    }, 

    unbindScrolling: function() { 
    $(window).unbind('scroll'); 
    $(document).unbind('touchmove'); 
    } 
}); 

App.ApplicationView = Ember.View.extend(App.Scrolling, { 
    didInsertElement: function() { 
     this.bindScrolling(); 
    }, 
    willRemoveElement: function() { 
     this.unbindScrolling(); 
    }, 
    scrolled: function() { 
     console.log('MyView was scrolled : ' + document.body.scrollTop); 
    } 
}); 

但我相信它的建議去抖此,使用灰燼運行循環(尤其是抖 - http://emberjs.com/api/classes/Ember.run.html#method_debounce)。

非工作代碼示例在這裏:

http://jsbin.com/wofaj/5

問題代碼在這裏:

onScroll = Ember.run.debounce(this, scrollFunc, 200); 

不幸的是,無論什麼情況下(S)我用我似乎無法得到它的工作。

有些見解將非常感謝。

感謝,

克里斯

回答

3

如果onScroll被分配給一個函數,它將正常工作,

onScroll = function(){Ember.run.debounce(this, scrollFunc, 200);}; 

http://jsbin.com/qoxulomo/1

0

另一種方式去抖在灰燼的功能如下:

App.Scrolling = Em.Mixin.create({ 
    timer: null, 

    scrollBinding: function() { 
     this.set('timer', Em.run.debounce(this, this._scrollFunction, 100)); 
    }, 

    _scrollFunction: function() { 
     // This function will run after 100ms after scrolling stops 
    }, 
});