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);
}
});