我们正在使用 Backbone 视图来增强我们的应用程序,并且我们的应用程序的架构要求我们将视图附加到现有的 DOM 元素。
我们最近遇到了一种情况,需要在不移除 DOM 元素本身的情况下从 DOM 元素中分离 Backbone 视图。因此,我们不能使用,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% 有信心,所以我想知道其他人是如何处理这种情况的。
这个方法听起来不错?有没有更好的方法来实现这一目标?