11

undelegateEvents()viewremove()メソッドを呼び出すのは悪い習慣ですか?なぜバックボーンの人たちによってデフォルトで含まれていなかったのですか?

ビュー変数を再初期化するだけで、非常に多くのバインディングの問題に陥っていることに気づきました。undelegateEvents()新しいビューが作成されると自動的に呼び出されますが、前のビューではなく、新しくインスタンス化されたビューのイベントの委任を解除しようとしています。したがって、毎回手動で呼び出さない限り、ゴーストイベントのコールバックは存続し、アプリを台無しにしてしまいます。

これを処理するための最良の方法は何ですか?

4

1 に答える 1

6

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()

于 2012-05-25T18:21:10.910 に答える