bookList ビュー (books をモデルとする) と book ビュー (book をモデルとする) があるとします。
すべてのブックビューで関数を実行したい場合。少なくとも 2 つの方法があります。
関数を直接実行するよりも、bookList ビューのすべてのブック ビューを含む配列を維持します。
ビューが関数を実行するように、books モデル内のすべての book モデルでカスタム イベントをトリガーします。
どちらの方がよいですか?
bookList ビュー (books をモデルとする) と book ビュー (book をモデルとする) があるとします。
すべてのブックビューで関数を実行したい場合。少なくとも 2 つの方法があります。
関数を直接実行するよりも、bookList ビューのすべてのブック ビューを含む配列を維持します。
ビューが関数を実行するように、books モデル内のすべての book モデルでカスタム イベントをトリガーします。
どちらの方がよいですか?
アプリケーションについてもう少し検討する必要があると思います。アプリケーションの概念の自然な流れによって決定に導かれるでしょう。
あなたの方法によると:
それらの bookView が十分にない場合は、解決策になる可能性があります。実際、ここで自問する必要があるのは、この配列がその関数だけに本当に必要なのか、それとも他の用途に使用できるのかということです。
これにより、すべての bookView にいくつかの同一のイベント リスナーとコールバック (関数自体) が追加されます。同じ情報を得るために、すべての bookView がブラウザのメモリ共有を必要とします。
私は3番目の方法も考えています:
したがって、これを実行して、必要な関数を使用してトリガーに引数を設定することができます。基本的に、本のビューのコードは次のようになります。
var cb = function(theFn) {
theFn.apply(this); // here we are setting theFn this to this view
}
bookList.on('doThisFunction', cb, this);
トリガーすると、次のようなことができます
theFn = function() {
this.render();
}
bookList.trigger('doThisFunction', theFn);
bookView が不要になったらbookList.off('doThisFunction', cb)
、 bookList イベントアグリゲーターにゴミが入るため、 book View から eventlistener : をオフにする必要があることに注意してください。