2012-02-07 89 views
1

我正在使用BackboneJS處理一個相當複雜的應用程序。我有一個Globals對象,我用它來發布/訂閱事件。挑戰在於,似乎沒有一種有效的方法來使用事件驅動架構來分離功能。Backbone 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(); 

那當您在go中撥打console.log致電{where_is: 'pancakes house?', ill_cook: 'you some eggs, Margie'}時,您將在o中留下您的號碼。

演示:http://jsfiddle.net/ambiguous/4XCmc/

標準的骨幹事件對課程的聽衆自己指定的參數列表,但你可以添加你需要的任何自定義事件。

+0

謝謝。真棒! – 2012-02-07 23:15:31