我正在创建一个单页应用程序。我想在切换到另一个 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 内存泄漏的好文章:
我认为您不需要显式地从内存中删除模型和集合。您只需要确保 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/