undelegateEvents()
viewremove()
メソッドを呼び出すのは悪い習慣ですか?
独自に実装していて、またはremove()
を呼び出さない限り、これは必要ありません。それは、少なくともjQueryを使用している場合です。バックボーンビューを呼び出すと、とにかくすべてのDOMイベントリスナーが削除されます。Backbone.View.remove()
this.$el.remove()
remove()
jQuery.remove()
ビュー変数を再初期化するだけで、非常に多くのバインディングの問題に陥っていることに気づきました。
多くの人がBackbone.Eventsを使用しているようです。たとえば、次のように、後からクリーンアップする必要のない魔法のようなイベントです。
var View = Backbone.View.extend( {
initialize : function ( options ) {
// `on()` or `bind()`
this.model.on( 'something', this.render, this );
}
} );
バックボーンの親ビューへのイベントの委任に関する私の回答を参照してください
発生しているゴーストイベントの問題が、DOMイベントではなくバックボーンイベントにある可能性はありますか?
モデルオブジェクトを保持しているが、そのビューオブジェクトまたはそのバックボーンイベント登録を削除したい場合は、を実行する必要がありますview.model.off( null, null, this );
。外部オブジェクトに登録したイベントのバインドを解除する必要があります。必要に応じて、オーバーライドしてそこで実行することもできますBackbone.View.remove()
が、デフォルトでは、そのメソッドはの省略形ですview.$el.remove()
。