Knockout.js 禁用计算可观测

Knockout.js 禁用计算可观测,knockout.js,Knockout.js,我有一个问题,一个计算的可观察对象正在从地狱创建通知链(Ordo n^2) 我需要做的是 Disable computed observable Do stuff Enable observable and notify subscribers (View) 发现了这个但已经一年多了 我希望现在有一些内置的解决方案 编辑:显示问题的小提琴 它非常接近真实的网站代码 尝试使用top复选框选择所有项目,它将只对canSave computed执行两次调用,尝试取消选中它,它将对canSave c

我有一个问题,一个计算的可观察对象正在从地狱创建通知链(Ordo n^2)

我需要做的是

Disable computed observable
Do stuff
Enable observable and notify subscribers (View)
发现了这个但已经一年多了

我希望现在有一些内置的解决方案

编辑:显示问题的小提琴

它非常接近真实的网站代码 尝试使用top复选框选择所有项目,它将只对canSave computed执行两次调用,尝试取消选中它,它将对canSave computed执行n次调用,并且由于canSave方法在整个集合中的速率可能会变慢。

尝试节流选项(“不是扩展器”)


我相信节流扩展器会将计算结果包装在一个额外的computed中,因此效率较低。

请查看这篇文章,这是节流扩展器的更新:

可能需要更多细节或JSFIDLE示例来提供更好的帮助,但上面的文章仍然有效。其他可能有帮助的技术是“节流”扩展器:或者看看Michael Best的延迟更新插件:谢谢回复,请参见编辑我认为你可以使用“暂停”的想法来实现这一点。这是一个更新的示例:啊,它现在内置了吗?你应该更新你的knockmeout文章,我从你的文章中剪切并粘贴了代码。谢谢你的更新,这很好,我只使用了knockmeout文章中的版本。文章中的版本将功能包装得更好一些(read函数不需要知道它是暂停标志)。我只是想展示一下,使用一个可观察的标志可以很容易地完成,您可以将它添加为子可观察的。扩展程序或扩充基本类型的
.fn
将是一个很好的方法,因为这些技术从KO2.0开始就可用了。
comp=KO.computed(function(){return stuff;})。扩展({throttle:1})
对我来说很有效。
comp = ko.computed(function () {
    return stuff;
}, this, {throttle: 1});