私は Backbone と数日間一緒に仕事をしてきました。デザイン パターンなどについて調べています。今日、たくさんのリソースを読んだ後、サブビューをいじっていました。主に、この2つの投稿-
デリック・ベイリー
http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/
イアン・ストーム・テイラー
http://ianstormtaylor.com/assigning-backbone-subviews -さらにきれいに/
これらおよび他のものは、いくつかのサブビューをセットアップし、正しいパターンであると思われるものでそれらを閉じるのを処理するのに非常に役立ちました。
Backbone.View.prototype.close = function(){
var ctx = this;
_.each(ctx.subViews(), function(view) {
view.close();
});
this.remove();
this.unbind();
}
ここで問題はありません。私が期待したことをしているようです。しかし、何が起こったのかを確認するために、テストしたかったのです。そこで、subViews で close を呼び出すのをやめ、レンダーを 20,000 回ループしました。
Backbone.View.prototype.close = function(){
var ctx = this;
_.each(ctx.subViews(), function(view) {
//view.close();
});
this.remove();
this.unbind();
}
ここにはゾンビ イベント ハンドラや DOM ノードはありません。これは私にとって少し驚きでした。私は jQuery の内部構造の専門家ではなく、少なくとも子ノードからのイベント ハンドラーがまだあることを期待していました。しかし、私のサブビューはすべて親ビューに含まれており、まだ削除されてバインドされていないため、jQuery はすべての子を正常にクリアしていると思います。だから私は親要素のアンバインドをやめました:
Backbone.View.prototype.close = function(){
var ctx = this;
_.each(ctx.subViews(), function(view) {
//view.close();
});
this.remove();
//this.unbind();
}
Chrome インスペクターのイベント ハンドラーの数がまだ増えません。
だから私の質問は:
この方法でイベントのバインド解除とサブビューを巧みに処理する必要がある場合の「実際の」例は何ですか? ビューの直接の範囲外のオブジェクト参照ですか? サブビューが親ビューの $el に含まれていない場合のみですか?