2013-06-21 33 views
0

我在我的Backbone代码中定义了一个ListView和InstanceView。 ListView控件与集合相关联,它实例化,像这样在这种情况下,BackboneJS ModelView何时会收集垃圾?

render: function() { 
    this.collection.forEach(function(instance){ 
     var commentHTML = new InstanceView({ 
     model: instance 
     }).render(); 
     renderedComments.push(commentHTML); 
    }); 
} 

的InstanceView新的视图实例render调用结束后超出范围。但我注意到,这种观点在记忆中仍然存在。我可以告诉,因为附加到它的事件在渲染方法终止后仍然会很长时间。

那么,视图是否避免gc,因为它引用了模型对象,而模型对象又被集合引用了?

回答

2

创建视图时在模型上注册事件。回调引用了视图,防止它被gc化。

查看github上的骨干代码。这些事件与delegateEvents方法有关。

+0

谢谢TAS,很好的解释。 – Ben

1

当JS引擎感觉像收集它们时,垃圾收集对象。

但是,您的问题实际上是不同的。

只是因为不能访问的对象,并不意味着:

  1. 没有就可以了,
  2. 事情,它十分重视走开。

此外,你明确添加对象集合,所以它不符合收集资格。