【问题标题】:Efficient ways to remove a nested view in Backbone在 Backbone 中删除嵌套视图的有效方法
【发布时间】:2014-01-23 04:10:52
【问题描述】:

我正在创建一个单页应用程序。我想在切换到另一个视图时删除一个视图。在当前视图中,我有一组照片。如何有效地删除视图和照片集的视图而不会出现内存泄漏?

我做了以下事情:

销毁方法:

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操作就可以一次性完成了。接下来,我重置集合并销毁这些模型和相关视图。

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

【问题讨论】:

    标签: javascript backbone.js


    【解决方案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()。

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多