2013-01-03 2 views
3

내 스로틀을 내가 변경할 수있는 동적 번호로 사용하고 싶지만 가능하지는 않습니다. 이것은 스로틀 익스텐더의 한계입니까?생성 후 녹아웃 스로틀 익스텐더를 변경할 수 있습니까?

제 경우에는 조절 필터가 있습니다. 그리드에 몇 개의 항목 만 있다면 매우 낮은 스로틀을 원합니다. 그러나 그리드 행 수가 매우 커지면 (아마도 최대 ~ 300ms로) 변경하고 싶습니다. 예컨대 :

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

나중에 내가 같은 것을 할 싶습니다 작동하지 않습니다

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

나는 그것이 스로틀 익스텐더의 한계라고 말할 수는 없지만, 관찰 가능한 익스텐션의 작동 방식에 대한 제한 사항. 아마도 관측 가능을 검사하고 그에 따라 시간을 조정할 수있는 새로운 스로틀 확장을 만들 수 있습니다. –

답변

4

을 내장 스로틀 방법.

직접 제작하는 것은 어렵지 않습니다. 심플 사용

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

: 예를 들어, 다음은 의지에 따라 변경 될 수 있습니다 관찰하는 A 스로틀 시간을 통과, 당신이 어떤 관찰에 .throttle 호출 할 수 있도록 몇 가지 코드의

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

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

이와 같이 많은 것을하고 있다면 (조절하여 서로 다른 관측치를 구성) Rx.js에 관심이있을 수 있습니다.