ビューは、どこかに参照がある場合にのみ残ります。考慮すべき浮遊参照のソースが 4 つあります。
- モデルやコレクションへのバインディング
this.collection.on('reset', this.render)
など。
- ビューの
events
.
- 直接
$(...).on(...)
呼び出しによる DOM オブジェクトへのバインディング。
- などの単純な古い変数参照
this.current_view = new V(...)
。
(1)は通常、ビューのremove
メソッドによって処理され、remove
自分で呼び出す必要があります.BackboneまたはjQueryには、これを行うことができるものは何もありません. 例: http://jsfiddle.net/ambiguous/e574Z/
(2)簡単です。バックボーン ビューは、単一のdelegate
呼び出しを使用して、ビューのイベントをビューの にバインドしますel
。el
そのため、単純なビューを削除すると$(x).remove()
、イベント参照がなくなります。ただし、異なるビューを同じにアタッチする場合は、 を呼び出してデタッチするel
必要があります。これは通常、メソッドで行われます。undelegateEvents
delegate
remove
remove: function() {
this.undelegateEvents();
return this;
}
remove
しかし、繰り返しになりますが、どこかで自分自身を呼び出す必要があります。
(3)はまれですが、ウィンドウ スクロール イベント、ダイアログのボディ クリック イベントなどの場合に必要になることがあります。もちろん、バックボーンは背後で何をしているのかを知ることができず、バインドしている要素がビューの外側にあるため、これらを自分でクリーンアップする必要がありますel
(または(2)になります) 。 . これらをどこで掃除しますか?方法はremove
もちろん。
(4)は、いつものように、あなた次第です。通常、この種のことは次のように処理されます。
if(this.current_view)
this.current_view.remove();
this.current_view = null;
はい、またありremove
ます。
したがって、 (2)のようなものしかない場合$('#domID').remove();
は問題なく、ゾンビを残す必要はありません。実際、デフォルトのremove
実装は公正this.$el.remove()
であり、ドキュメントには次のように書かれています。
削除する view.remove()
DOM からビューを削除するための便利な関数。呼び出しに相当$(view.el).remove();
ただし、おそらく(1)のようなものも含まれているため、すべてのメソッドを追加/更新し、ビューを削除するためremove
に呼び出すことをお勧めします。view.remove()