我在解决骨干内存泄漏方面遇到了问题,到目前为止,我尝试在从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命中(我在视图中添加了事件)但是当我更改页面时它从未被收集过。
(关于出售事件..) 我没有明确地在所有视图上调用remove。 app容器被清空,jQuery执行cleanData。我添加了一个事件处理&我在cleandata中触发了这个函数
答案 0 :(得分: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