我在解决主干内存泄漏方面遇到问题,到目前为止,当视图从 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 中触发了该函数