2013-01-03 33 views
3

我希望我的油門可以隨意改變,但這看起來不太可能。這是油門延長器的限制嗎?創建後可以改變淘汰節流閥擴展器嗎?

在我的情況下,我有一個網格過濾器,我扼殺。如果我在電網中只有幾件物品,我想要一個非常低的油門。但是,如果網格行數變得非常大,我想改變它(也許最多300毫秒)。例如: -

this.filter = ko.observable("").extend({ throttle: 1 }); 

再後來我想這樣做:

this.filter.extend.throttle = 300; 
+2

我不會說這是油門擴展器的限制,而是可觀察擴展如何工作的限制。也許你可以做一個新的油門延伸,可以檢查可觀察的並相應地調整時間。 –

回答

4

這不會對工作內置油門的方法。

你自己建立這個並不難。例如,這裏的一些代碼,讓你打電話.throttle上任何可觀察到,經過一個節流時間觀察到的,可以隨意改變:

ko.subscribable.fn.throttle = function(throttleTimeObservable) { 
    var subscribable = this; 
    var throttledObservable = ko.observable(); 
    var timeoutHandle = null; 

    if (ko.isObservable(throttleTimeObservable)) { 
     throttletimeObservable.subscribe(function() { clearTimeout(timeoutHandle) }); 
    } 

    subscribable.subscribe(function(val) { 
     clearTimeout(timeoutHandle); 
     throttleTime = ko.utils.unwrapObservable(throttleTimeObservable); 
     timeoutHandle = setTimeout(function() { throttledObservable(val); }, throttleTime); 
    }); 

    return throttledObservable; 
} 

使用它很簡單:

// Usage: 
var existingObservable = ...; 
var throttleTime = ko.observable(500); 
var throttled = existingObservable.throttle(throttleTime); 

// Change the throttle willy nilly! 
throttleTime(1000); 

如果你正在做很多這樣的事情(節流,組合不同的觀察對象),你可能會對Rx.js感興趣。