2

我在解决主干内存泄漏方面遇到问题,到目前为止,当视图从 DOM 中删除时,我尝试使用 jquery CleanData 清理视图。

每次删除视图时(即使是通过 jQuery .html()),它都会触发 dispose() 方法,理论上该方法应该杀死所有阻止收集视图的引用。不幸的是,该应用程序只是建立了内存

下面的代码,

Backbone.View.prototype.dispose = function(){
    // unbind all events, so we don't have references to child views
    this.unbind();
    this.off();
    // if we have a collection - unbind all events bound to this context
    this.collection && this.collection.off(null, null, this);
    // do the same with a model
    this.model      && this.model.off(null, null, this);
    delete this;
};

干净的数据:

$.cleanData = function( elems ) {
    $.each( elems, function( i, elem ) {
        if ( elem ) {
            $(elem).trigger("dispose");
        }
    });
    oldClean(elems);
};

代码工作,dispose 被击中(我在视图中添加了事件)但是当我更改页面时它永远不会被收集。

(关于 dispose 事件..)我没有在所有视图上明确调用 remove。应用程序容器被清空,jQuery 执行 cleanData。我添加了一个事件处理并在 cleandata 中触发了该函数

4

1 回答 1

3

我认为问题在于delete this没有按照您的想法进行。这取决于您如何启动视图。您是否将视图分配给任何变量或在超出您更改页面的范围内启动它?

此外, Backbone View 上有一个函数remove()

更多关于 JavaScript delete http://perfectionkills.com/understanding-delete/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

于 2013-08-05T03:28:12.257 回答