2

この eventAggregator(Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events);)オブジェクトをパラメーターとして渡さずに Backbone.js のルーターで使用できるようにする最善の方法は何ですか?

インスタンス化する mainController (レンダリングのないビュー) があります Backbone.View.prototype.eventAggregator

また、mainController 内にルーターを作成していますが、ルーターではなく、View のみが eventAggregator を持ちます。

ルーターがそれを持てるように、さらに上に行って Backbone.prototype.eventAggregator を実行したくありません。これを行うよりクリーンな方法はありますか?

4

2 に答える 2

2

バックボーンには、使用できる次のようなものが既に組み込まれています(バックボーンソースから):

  // Allow the `Backbone` object to serve as a global event bus, for folks who
  // want global "pubsub" in a convenient place.
  _.extend(Backbone, Events);

次に、ルーターで:

Backbone.trigger('something');

そしてビューで:

this.listenTo(Backbone, 'something', this.someMethod);

または、何をしようとしているかに応じて、その逆です。

于 2013-02-14T18:29:16.303 に答える
1

Paul が述べたように、Router を含むすべてのバックボーン オブジェクトには Event オブジェクトが拡張されているため、これらにイベント リスナーを設定できます。しかし、さまざまなオブジェクトにイベント リスナーを設定したり、イベント アグリゲーターを渡したりする必要がないように、イベントの管理を一元化したい理由は理解できます。

Derick Bailey は以下の投稿でこれについて語っています。彼が提案する解決策は、アプリ レベルのイベント アグリゲーターを作成することです。

http://lostechies.com/derickbailey/2012/04/03/revisiting-the-backbone-event-aggregator-lessons-learned/

また、「to-do」アプリケーションよりも複雑なことをしている場合は、Chaplin、Marionette、ボイラープレートなどのバックボーン フレームワークを検討することをお勧めします。ここでリストを見つけることができます。

私のアプリケーションでは Marionette フレームワークを使用していますが、モジュール化された保守しやすいコードを作成するのに非常に便利であり、多くの通常の繰り返しコードが既にその中で処理されていることがわかりました。

于 2013-02-14T20:51:30.733 に答える