いくつかのイベント処理に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イベントを使用している場合、これは別の方法で処理されますか?