我希望我的油门是一个可以随意更改的动态数字,但这似乎不可能。这是油门延长器的限制吗?
就我而言,我有一个正在节流的网格过滤器。如果我在网格中只有几个项目,我想要一个非常低的油门。但是,如果网格行数变得非常大,我想更改它(可能最多约 300 毫秒)。例如:
this.filter = ko.observable("").extend({ throttle: 1 });
然后稍后我想做类似的事情:
this.filter.extend.throttle = 300;
我希望我的油门是一个可以随意更改的动态数字,但这似乎不可能。这是油门延长器的限制吗?
就我而言,我有一个正在节流的网格过滤器。如果我在网格中只有几个项目,我想要一个非常低的油门。但是,如果网格行数变得非常大,我想更改它(可能最多约 300 毫秒)。例如:
this.filter = ko.observable("").extend({ throttle: 1 });
然后稍后我想做类似的事情:
this.filter.extend.throttle = 300;
这不适用于内置油门方法。
自己构建这个并不难。例如,这里有一些代码可以让你在任何 observable 上调用 .throttle ,传递一个可以随意更改的节流时间 observable :
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);
如果你正在做很多这样的事情(节流,将不同的 observable 组合在一起),你可能会对Rx.js感兴趣。