使用knockout.js 2.3.0和jquery mobile 1.3.1的内存泄漏

使用knockout.js 2.3.0和jquery mobile 1.3.1的内存泄漏,knockout.js,memory-leaks,Knockout.js,Memory Leaks,我们正在使用knockout 2.3.0和jquery mobile 1.3.1。我们使用$.mobile.changePage api从一个屏幕转换到另一个屏幕,并将ko ViewModel绑定到pagebeforeshow中相应的dom元素,并使用pageshow中的removeNode清理上一个屏幕的绑定。以下是相同的代码: $(document).ready(function() { $(document).on('pageshow', function(even

我们正在使用knockout 2.3.0和jquery mobile 1.3.1。我们使用$.mobile.changePage api从一个屏幕转换到另一个屏幕,并将ko ViewModel绑定到pagebeforeshow中相应的dom元素,并使用pageshow中的removeNode清理上一个屏幕的绑定。以下是相同的代码:

    $(document).ready(function() {
        $(document).on('pageshow', function(event, ui) {
            var prevId = ui.prevPage.attr('id');
            console.log('Clean node = ' + prevId);
            if (prevId && $('#' + prevId)){
                if($('#' + prevId)[0]){
                    console.log("$('#' + prevId) =  " + $('#' + prevId)[0]);
                    ko.removeNode($('#' + prevId)[0]);
                }
            }
        });

        $(document).on('pagebeforeshow', function(event, ui) {
            var Screen1VM = function() {
            };
            var Screen2VM = function() {
            };
            var path = event.target.id;
            if(path == 'Screen1'){
                var vmObj = new Screen1VM();
                ko.applyBindings(vmObj, document.getElementById('Screen1'));
            }else if(path == 'Screen2'){
                var vmObj = new Screen2VM();
                ko.applyBindings(vmObj, document.getElementById('Screen2'));
            } 
        });
    });
在chromedev工具上显式地执行垃圾收集并过滤objets Screen1VM和Screen2VM之后获取堆快照,我们看到这些对象的引用由一个不断增长的knockout对象数组保存。对象计数始终等于我们访问屏幕的次数,并且该次数永远不会下降。请让我知道,如果有什么错误是在这里做的