我想使用 Backbone.js 来处理一些事件,但我对循环引用和内存管理没有信心。假设我有一些名为 EventStation 的静态事件源 - 所以,在脚本的开头我说:
var source = new EventSource();
source
旨在为页面的生命而活,这很好。现在,我还有一个事件消费者:
var EventConsumer = Backbone.Model.extend({
initialize: function(params) {
source.on("some_event",this.onSomeEvent,this);
}
});
function later() {
var consumer = new EventConsumer();
// consumer now gets leaked... (I think)
}
我later()
在某个时候打电话 - 最后,我不再可以访问消费者,除非我去挖掘source
. 我想我需要添加一些新功能EventConsumer
,比如
cleanup: function() {
source.off("some_event",this.onSomeEvent,this);
}
然后在later()
.
这似乎......不像我想要的那样干净。有没有办法更好地做到这一点?如果我使用 DOM 事件,这会有所不同吗?