knockout.js - 创建后可以更改 knockout throttle 延长器吗?

标签 knockout.js throttling

我希望我的 throttle 是一个可以随意更改的动态数字,但这似乎不可能。这是 throttle 延长器的限制吗?

在我的例子中,我有一个正在 throttle 的网格过滤器。如果我在网格中只有几个项目,我想要一个非常低的 throttle 。但是,如果网格行数变得非常大,我想更改它(可能最多为 ~300 毫秒)。例如:

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

然后我想做这样的事情:

this.filter.extend.throttle = 300;

最佳答案

这不适用于内置 throttle 方法。

自己构建这个并不难。例如,这里有一些代码允许您在任何可观察对象上调用 .throttle,传递一个可以随意更改的 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);

如果您正在做很多类似的事情( throttle 、将不同的可观察对象组合在一起),您可能会对 Rx.js 感兴趣.

关于knockout.js - 创建后可以更改 knockout throttle 延长器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14147654/

相关文章:

wcf - 服务 throttle 默认值?

c# - Asp.Net WebApi OWIN 身份验证

javascript - ICheck 插件在 knockout js 检查绑定(bind)中不起作用

javascript - 为什么knockout-secure-binding会遇到这个语法错误

mysql - 在 Mule 中限制 Mule 消息

javascript - javascript闭包函数的使用

asp.net-mvc - 从/到 POCO 对象的 knockoutjs 映射

javascript - Visual Studio Code - 挖空 - 找不到名称 'ko'

javascript - react 事件监听器, throttle 未被删除

c# - throttle 异步任务?