2012-04-06 11 views
19

バックボーンのイベントに関する簡単な質問 - さまざまなビューで再利用できる一連のグローバルイベントを定義する方法はありますか?Backbone.jsグローバルイベント

たとえば、ページにレンダリングされる複数のビューがあるとします。各ビューにはメニューを展開するボタンがあります。他にもいくつかの一般的な要素とイベントがあります。このイベント・ロジックを各ビューに入れることなく、これらのビューのそれぞれが継承する方法や、グローバル・イベント定義からこれらのイベントを引き出す方法はありますか?これらの一般的なイベントを1か所で定義することで、時間を節約し、よりクリーンなソリューションになることは間違いありません。

イベントアグリゲータや工場パターンなどの用語が使われていますが、最良のアプローチについてはわかっていません。

答えて

51

あなたは基本的にイベントアグリゲータまたはディスパッチャについて説明しています。私が構築し、バックボーンでそれらを使用して記事のカップルを持っている:

http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

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

とバックボーンおよびその他のパブリッシュ/サブスクライブして同じことを行うためのウェブ周りのより多くの記事がたくさんありますライブラリ。

それはバックボーンで行うのは非常に簡単です:


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

、今、あなたは、アプリケーションのビューやその他のオブジェクトのすべてを通じてイベントアグリゲータとして使用することができventオブジェクトを持っています。


vent.on("some:event", function(){ 
    console.log("some event was fired"); 
}); 

vent.trigger("some:event"); 
+3

私はあなたの素晴らしい投稿に出会って、それが最もエレガントなソリューション(再訪されたようです)だと思いました!私はあなたの記事に従ってきました。ただし、これは、各ビューでイベントのグループを指定する必要があることを意味します(必要なイベントをトリガーするだけです)。これらのビューの各グループは常に同じタスク(たとえば、追加または編集ボタン)を実行するため、ビューをさらに簡素化する方法はありますか? – crawf

+0

参考までに、あなたのlostechies.comドメインは自動的にhttpsにリダイレクトされていますが、HTTP経由でGitHubコードスニペットを読み込んでブロックしようとしています。 –