2013-06-21 65 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. 事情,它十分重視走開。

此外,你明確添加對象集合,所以它不符合收集資格。