TLDR;使用 Backbone 事件,当事件对象没有更多的侦听器时,有没有办法触发一些代码?
我有一个 Backbone Marionette View 来监听Model A
. 当我完成视图时,我调用view.close()
它导致它停止监听所有事件Model A
。如果这个模型没有被其他任何东西引用,它现在可以被垃圾收集。
但是我的问题是Model A
监听更改事件,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);
}
});