1

中央ディスパッチャーと AppView と呼ばれる中央ビューを備えた Backbone.js アプリを使用しています。

イニシャライザで、中央ディスパッチャを次のように宣言します。

this.dispatcher = _.extend({}, Backbone.Events);

このディスパッチャは、アプリが持つすべてのビューに渡されます。それぞれが、このディスパッチャーのカスタム イベントをトリガーおよび/またはバインドできます。このようにして、ネストされたビューなどへの参照を持たずにビュー間の通信を許可するふりをします。

私の問題は次のとおりです。

同じイベントをリッスンしている複数のビューがある場合、x イベントが誰かによってトリガーされたときに、それらのすべてのビューがそれに応答できます。私の問題は次のとおりです。アプリケーションのコンテキスト (フロー) によっては、すべてのリスナーがそのイベントに反応するわけではありません...

回避策はありますか?中央のディスパッチャーがどうあるべきか、私は何か間違っていますか?

ありがとう!

4

2 に答える 2

0

私は最近、同様の状況に直面し、さまざまな解決策を見つけた解決策を探しています。

  1. すべてのモデルとビューで共有される中央イベント ディスパッチャを使用します。この興味深い投稿で、このソリューションを取得します。

http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/

  1. この投稿で開発されているように、ディスパッチャーをすべてのモデルとビューに対してネイティブにアクセスできるようにします。

http://devlicio.us/blogs/mike_nichols/archive/2011/10/20/backbone-events-and-aggregator-update.aspx

私の経験から、コードを良好な状態に維持するには、中央ディスパッチャーの使用を避ける価値があります。アプリのモジュールごとに一連のディスパッチャーを作成します (各モジュールには、それぞれを通信する必要があるさまざまなビューを含めることができます)。

var searchTabEvents = _.extend({}, Backbone.Events); //handler events for the search tab
var visualizationEvents = _.extend({}, Backbone.Events); //handler events for the visualization tab

そして、ビューを作成するときに、ビューに適切なイベント ハンドラーを渡します。

var extEvents = searchTabEvents;

var searchView = new SearchView({customEvents : extEvents});
于 2013-07-25T10:01:08.440 に答える
0

「メディエーター」が必要になると思います。イベントとカスタムイベントを、サブスクライブするすべてのビューにブロードキャストします。

于 2013-05-29T01:00:25.377 に答える