2014-01-23 4 views
1

Я создаю одностраничное приложение. Я хочу удалить представление при переключении на другое представление. В текущем представлении у меня есть коллекция фотографий. Как я могу эффективно удалить представление и представления коллекции фотографий без утечек памяти?Эффективные способы удаления вложенного представления в Backbone

Я сделал следующее:

уничтожить метод:

destroy: function(){ 
    this.undelegateEvents(); 
    this.stopListening(); 
    this.$el.empty(); 
    collection.reset(); 
} 

событие:

this.listenTo(collection, 'reset', this.resetBoard); 

обработка событий:

resetBoard: function(collection, options){ 
    var models = options.previousModels; 
    _.each(models, function(model){ 
    model.id = null; 
    model.destroy(); 
    }); 
} 

здесь я опорожнить $ эш первый ($ el wiil будет использоваться другим видом s), так что операция DOM может быть выполнена за один раз. Затем я перезапускаю коллекцию и уничтожаю эти модели и связанные с ними виды.

Правильно ли эта логика? Есть ли лучшие решения?

ответ

1

Это хорошая статья о предотвращении утечек памяти в Backbone Просмотров:

http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

Я не думаю, что вам нужно явно удалить модели и коллекции из памяти. Вам просто нужно убедиться, что представление больше не прослушивает изменения в них. Это отличный обзор сбора мусора в JavaScript и позвоночника в частности:

What does backbone.js do with models that are not used anymore

В любом случае, использование model.destroy() кажется немного странным/Hacky ко мне, потому что я думаю о нем, как сервер (удаление модели с сервера), и я также задаюсь вопросом, будет ли resetBoard когда-либо выполняться, так как вы уже вызвали stopListening(), когда коллекция сбрасывается.

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