销毁对Knockout中的observable的订阅

时间:2015-05-28 01:03:13

标签: knockout.js

我在大型淘汰赛中狩猎内存泄漏。我发现了一种内存泄漏的模式,我似乎无法在其他地方找到它。

使用knockout的调试版本考虑以下代码:

var myObservable = ko.observable();
console.log('Before any subscriptions: ' + Object.keys(myObservable._subscriptions).length);

var myObservableArray = ko.observableArray([]);

var myComputed = ko.computed(function() {
    myObservableArray().forEach(function(observableItem) {
        var test = observableItem();
    });
});

myObservableArray([myObservable]);

console.log('After adding to array: ' + Object.keys(myObservable._subscriptions).length);

myObservableArray([]);

console.log('Removed from array: ' + Object.keys(myObservable._subscriptions).length);

控制台将输出以下内容:

Before any subscriptions: 0
After adding to array: 1
Removed from array: 1

所以,问题是,在我的应用程序中,有一个点我完成使用给定的observable(控件视图模型上的属性,控件现已被删除)。我已经发布了对它的所有引用,但是全局计算机保留了对它的引用,从而使我的控件的视图模型不被垃圾收集。

我不想处理计算机 - 我仍然需要其他控件。我真的需要以某种方式销毁/处置可观察物本身。

我在这里缺少什么?

0 个答案:

没有答案