2013-06-21 3 views
0

У меня есть ListView и InstanceView, определенные в моем коде Backbone. ListView связан с коллекцией и конкретизирует в InstanceView как такКогда модель BackboneJS ModelView получает сбор мусора в этом случае?

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

новый экземпляр вид выходит из области видимости после рендер отделки вызова. Однако я заметил, что представление сохраняется в памяти. Я могу сказать, что связанные с ним события по-прежнему срабатывают долго после завершения метода рендеринга.

Таким образом, избегает ли gc gc из-за ссылки на объект модели, который, в свою очередь, ссылается на коллекцию?

ответ

2

Когда создается представление, события регистрируются на модели. Обратные вызовы имеют ссылки на представление, не позволяя ему быть gc'ed.

Проверьте системный код на github. События подключены в методе delegateEvents.

+0

Спасибо TAS, большое объяснение. – Ben

1

Объекты - это мусор, собранный всякий раз, когда двигатель JS чувствует себя как собирающий их.

Ваш вопрос, однако, на самом деле отличается.

Просто потому, что вы не может получить доступ к объекту не значит:

  1. Ничего может, и
  2. вещи он придает также уйти.

Кроме того, вы явно добавить объект в коллекцию, так что не имеет права на коллекцию.

Смежные вопросы