Knockout.js 敲除即使在对象为空后仍保持对计算属性的订阅

Knockout.js 敲除即使在对象为空后仍保持对计算属性的订阅,knockout.js,Knockout.js,即使在我取消了具有计算属性的对象之后,如果相关观测值发生了变化,也会调用计算属性 我希望,既然我已经取消了对象,它应该被垃圾收集,但是看起来Knockout使对象保持活动状态,并且使不再相关的订阅保持活动状态 在knockout中有没有一种方法可以做到这一点,那就是删除为空对象的订阅,从而使其可用于垃圾收集。我试图查看它的文档,但没有成功 这里有一把小提琴来演示这个问题 您需要使用ko.computed的dispose方法 从: dispose()-手动处理计算的可观察对象,清除对依赖项的所有

即使在我取消了具有计算属性的对象之后,如果相关观测值发生了变化,也会调用计算属性

我希望,既然我已经取消了对象,它应该被垃圾收集,但是看起来Knockout使对象保持活动状态,并且使不再相关的订阅保持活动状态

在knockout中有没有一种方法可以做到这一点,那就是删除为空对象的订阅,从而使其可用于垃圾收集。我试图查看它的文档,但没有成功

这里有一把小提琴来演示这个问题


您需要使用
ko.computed
dispose
方法

从:

dispose()
-手动处理计算的可观察对象,清除对依赖项的所有订阅。如果要停止更新计算的可观察对象,或要清除与不可清除的可观察对象有依赖关系的计算可观察对象的内存,则此函数非常有用。

所以你只需要写:

function NullifyAndSetValue()
{
    msrmnt1.msrmntValue.dispose();
    msrmnt1 = null;

    msrmnt2.msrmntValue.dispose();
    msrmnt2 = null;

    line.convertFactor(80);
}

演示。

您需要使用
ko.computed
dispose
方法

从:

dispose()
-手动处理计算的可观察对象,清除对依赖项的所有订阅。如果要停止更新计算的可观察对象,或要清除与不可清除的可观察对象有依赖关系的计算可观察对象的内存,则此函数非常有用。

所以你只需要写:

function NullifyAndSetValue()
{
    msrmnt1.msrmntValue.dispose();
    msrmnt1 = null;

    msrmnt2.msrmntValue.dispose();
    msrmnt2 = null;

    line.convertFactor(80);
}

演示。

谢谢@nemsev。只是对您提供的fiddle做了一个小小的更改-我们需要在使对象无效之前处理计算出的属性..谢谢@nemsev。只是对您提供的fiddle做了一个小小的更改-我们需要在取消对象之前处理计算属性。。