我们正在使用Backbone视图来增强我们的应用程序,我们的应用程序的体系结构要求我们将视图附加到现有的DOM元素。
我们最近遇到了这样一种情况:必须从DOM元素中分离Backbone视图而不删除DOM元素本身。因此,我们无法使用View.remove()
,因为它会依次调用this.$el.remove()
;
我最初创建了以下方法来分离视图,但我担心我可能会导致内存泄漏:
detach: function() {
this.stopListening();
this.unbind();
this.setElement(null);
}
这有效地用空的jQuery对象替换了View的元素,它解除了所有Backbone事件的绑定。但是,我发现jQuery可能正在存储对新空对象的引用。我对jQuery的内部结构并不完全清楚,所以我不能评论这种方法的有效性。
然后我按如下方式修改了方法:
detach: function() {
this.stopListening();
this.unbind();
this.undelegateEvents();
this.el = null;
this.$el = null;
}
我认为这会更好地实现所需的结果,因为它删除了对DOM和jQuery的所有引用。我对这种方法没有100%的信心,所以我想知道其他人是如何处理这种情况的。
这种方法看起来好听吗?有没有更好的方法来实现这一目标?
答案 0 :(得分:1)
扩展视图并覆盖删除,以便它不再调用它。$ el.remove();
实施例
var EnhanceView = Backbone.View.extend({
remove: function() {
this.stopListening();
return this;
}
});
应该就这么简单。