2012-02-07 8 views
1

私はかなり複雑なアプリケーションを使ってBackboneJSで作業しています。イベントにパブリッシュ/サブスクライブするために使用するグローバルオブジェクトがあります。課題は、イベントドリブンアーキテクチャを使用して関数をデカップリングする効率的な手段がないように見えるということです。バックボーンJSイベント関数はオブジェクトを変更します

私はMagentoのようなイベントシステムを考えています。 Magentoでは、dispatchEventに電話して、オブジェクトに沿って渡します。 Magentoの次の行(中断している、つまり、そのイベントのすべての加入者が最初に実行するのを待っている)は、それらのオブジェクトに再びアクセスできます。この方法の素晴らしい点は、イベントをサブスクライブする関数は、変更可能なオブジェクトを渡してからそのオブジェクトを返すことです。

したがって、サブスクライバが実行を終了すると、この変更されたオブジェクトを使用して実行を完了できます。 JSでは、それはコールバックですが、アイデアは同じです。

だから私の質問:

  • あなたがバックボーンに焼いこのような何かを知っていますか?
  • 知っているプラ​​グインはありますか?

ありがとうございました!

答えて

2

独自のイベントを定義し、必要なイベントハンドラにパラメータを渡すことができます。たとえば、あなたがイベントを定義し、そのイベントをトリガするときにオブジェクトを渡すことができます:

var M = Backbone.Model.extend({ 
    go: function() { 
     var o = { }; 
     this.trigger('some:event', o); 
     console.log(o); 
    } 
}); 

、その後、リスナーは、彼らが引数として取得対象にしたいものは何でも隠しておくことができます。

var m = new M; 
m.on('some:event', function(o) { 
    o.where_is = 'pancakes house?'; 
}); 
m.on('some:event', function(o) { 
    o.ill_cook = 'you some eggs, Margie'; 
}); 
m.go(); 

ことgoconsole.logコールにアクセスしたときにに{where_is: 'pancakes house?', ill_cook: 'you some eggs, Margie'}を残します。

デモ:http://jsfiddle.net/ambiguous/4XCmc/

標準バックボーンイベントはもちろんのリスナーのために独自の指定された引数リストを持っていますが、あなたは何が必要カスタムイベントを追加することができます。

+0

ありがとうございます。驚くばかり! –

関連する問題