0

bookList ビュー (books をモデルとする) と book ビュー (book をモデルとする) があるとします。

すべてのブックビューで関数を実行したい場合。少なくとも 2 つの方法があります。

  1. 関数を直接実行するよりも、bookList ビューのすべてのブック ビューを含む配列を維持します。

  2. ビューが関数を実行するように、books モデル内のすべての book モデルでカスタム イベントをトリガーします。

どちらの方がよいですか?

4

1 に答える 1

0

アプリケーションについてもう少し検討する必要があると思います。アプリケーションの概念の自然な流れによって決定に導かれるでしょう。

あなたの方法によると:

ビューで配列を維持する

それらの bookView が十分にない場合は、解決策になる可能性があります。実際、ここで自問する必要があるのは、この配列がその関数だけに本当に必要なのか、それとも他の用途に使用できるのかということです。

すべての本のモデルでカスタム イベントをトリガーする

これにより、すべての bookView にいくつかの同一のイベント リスナーとコールバック (関数自体) が追加されます。同じ情報を得るために、すべての bookView がブラウザのメモリ共有を必要とします。

私は3番目の方法も考えています:

BookList ビューで 1 つのカスタム イベントをトリガーします。これは Book ビューによってリッスンされます。

したがって、これを実行して、必要な関数を使用してトリガーに引数を設定することができます。基本的に、本のビューのコードは次のようになります。

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 : をオフにする必要があることに注意してください。

于 2012-05-04T15:07:42.890 に答える