在Backbone中删除嵌套视图的有效方法

时间:2014-01-23 04:10:53

标签: javascript backbone.js

我正在创建一个单页应用。我想在切换到另一个视图时删除视图。在当前视图中,我有一组照片。如何在没有内存泄漏的情况下有效地删除照片集的视图和视图?

我做了以下事情:

破坏方法:

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($ el将被其他视图使用),这样DOM操作就可以一次完成。接下来,我重置集合并销毁那些模型和相关视图。

这个逻辑是否正确?有没有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

这是一篇关于防止Backbone Views中内存泄漏的好文章:

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()。