次の 2 行のコードの長所と短所は何ですか? 同じことをするのに2つの異なる方法がある理由がわかりません。
this.listenTo(app.Todos, 'change:completed', this.filterOne);
app.Todos.on('change:completed', this.filterOne);
また、.on を使用する場合、デフォルトのコンテキストを確認するにはどうすればよいですか?
次の 2 行のコードの長所と短所は何ですか? 同じことをするのに2つの異なる方法がある理由がわかりません。
this.listenTo(app.Todos, 'change:completed', this.filterOne);
app.Todos.on('change:completed', this.filterOne);
また、.on を使用する場合、デフォルトのコンテキストを確認するにはどうすればよいですか?
listenToこれらのリスナーは自動的に削除されるためstopListening、ビューが削除されたときに が呼び出されます ( 経由remove())。以前listenToは、ファントム ビューが永遠にぶらぶらする (メモリ リークや誤動作の原因となる) という非常に陰湿な問題がありました。これは、ビュー インスタンス自体がなくなって DOM に存在しなくなったにもかかわらず、ビュー メソッドがモデルのイベント リスナーとして参照されていたためです。
のバックストーリーを読みたい場合はlistenTo、バックボーンの github リポジトリを検索してlistenTo、より長い問題の議論を読んでください。
デフォルトのコンテキストに関しては、いくつかのものがバインドされる可能性がありますthis:
this.listenTo、それは常にビュー インスタンスになります (コメントで Wim Leers が指摘)this.listenToと話がややこしくなる
foo.on) を指定すると、バックボーンはそれを使用します (したがって、これはより堅牢なアプローチです)。function () {//your event handler}.bind(this)、コンテキストを手動で制御することもできます (こちらも推奨)_.bindまたは$.proxyECMAの代替品が利用可能ですfunction.bindthis.bindAll('onClick', ...)、ビュー インスタンスがコンテキストになります。thiseventsプロパティを使用して接続されたすべてのイベントは、バックボーンによってビュー インスタンスに自動的にバインドされます (これは を使用したベルトとサスペンダーですbindAll) 。したがって、いくつかのガイドラインに要約すると、次のようになります。
events簡潔で正しいため、可能な限りプロパティを使用してくださいthis.listenToモデルとコレクションへのすべてのバインディングに使用Function.bindますが、ここにはいくつかの優れたオプションがあります。