我想使用Backbone.js进行一些事件处理,但我对循环引用&内存管理没有信心。比方说,我有一个名为EventStation一些静态事件源 - 所以,在脚本我说的开始:Backbone.js事件和内存管理
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事件,这会处理不同吗?
不够公平 - 我想这将不得不这样做。 – Daniel 2012-07-06 16:39:06