【发布时间】:2013-10-15 06:29:50
【问题描述】:
TLDR; 对于 Backbone 事件,有没有办法在事件对象没有更多侦听器时触发某些代码?
我有一个 Backbone Marionette View 来监听 Model A 上的更改事件。完成视图后,我调用view.close(),这会导致它停止侦听Model A 上的所有事件。如果这个模型没有被其他任何东西引用,它现在可以被垃圾收集。
但是我的问题是 Model A 正在监听 Model B 上的更改事件,而 Model B 又正在监听来自网络套接字的实时更新。
所以当Model A 停止监听Model B 时,它可以被释放,但Model B 仍将保留在内存中,因为web socket 有一个回调。添加modelB.close() 方法不一定有效,因为其他对象可能仍在使用Model B。但是,如果没有其他对象正在使用 Model B 的该实例,那么我希望它触发它的 stopListening 方法,然后反过来让 Web 套接字知道它可以在没有人再听它时关闭。
编辑: 基于答案的解决方案; https://gist.github.com/DomBlack/6885740 使用示例;
var BackboneExt = require('/path/to/gist');
var modelB = Backbone.Model.extend({
initialize: function() {
BackboneExt.autoCleanup(this);
}
});
【问题讨论】:
标签: javascript backbone.js memory-leaks marionette backbone-events