javascript - 在 Backbone 中删除嵌套 View 的有效方法

标签 javascript backbone.js

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

我做了以下事情:

销毁方法:

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

这个逻辑正确吗?有没有更好的解决办法?

最佳答案

这是一篇关于防止主干 View 内存泄漏的好文章:

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

我认为您不需要显式地从内存中删除模型和集合。您只需要确保 View 不再监听其中的更改。这是对 javascript 和主干垃圾收集的一个很好的概述:

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

无论如何, model.destroy() 的使用对我来说似乎有点奇怪/hacky,因为我认为它是一个服务器操作(从服务器中删除模型),而且我也想知道resetBoard是否会执行当集合重置时,您已经调用了 stopListening()。

关于javascript - 在 Backbone 中删除嵌套 View 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21299197/

相关文章:

javascript - React.js 语法错误 : Unexpected token <

javascript - D3 中的嵌套 SVG 选择

javascript - Firefox 安全错误 : "The operation is insecure."

javascript - 主干 View 事件绑定(bind)较晚

javascript - 如果另一个下拉列表选择发生更改,则重置一个下拉列表

javascript - PHP 从 Ajax 调用接收空的 $_POST 变量

javascript - DOM Javascript : creating an array just with elements that display something

javascript - 在 Backbone 中渲染集合的最佳方法

backbone.js - 如何在单个页面应用程序中处理非根URL?

jquery - 模板内的主干、Bootstrap 模式未显示