2011-12-23 84 views
13

我寫Backbone.js的使用作爲一個MVC框架選項卡菜單組件。當用戶點擊選項卡時,組件會切換選項卡(內部操作),但是我希望組件的偵聽器響應與事件相關的操作。這背後的想法是,我將各種點擊抽象爲特定的操作。例如,對於每個標籤的模型是用以下結構的哈希:Backbone.js的 - 使用對觸發器觸發事件​​,然後將數據

{ 
    label : <string>, 
    actionCommand : "save", 
    tabClass : <string> 
} 

時將觸發將被稱爲「行動」,讓聽衆會迴應「行動」,但然後將把特定事件命令。例如:

this.trigger("action", {actionCommand: "save"}); 

反過來,聽衆將同樣處理該事件於以下內容:

handleAction : function(event) { 
    if (event.actionCommand == "save") { 
    ...do something... 
    } 

}

這可能嗎?我無法從文檔中收集這些信息。預先感謝您提供的任何見解。

回答

30

是的,這是可能的骨幹。

您可以使用Events模塊來允許對象綁定和觸發自定義命名事件。

在你的情況,你會希望將活動模塊添加到您的菜單組件對象。如果這個對象是骨幹模型,那麼它已經有了Events模塊。如果沒有,那麼你可以用下面的代碼添加它

_.extend(MenuComponent, Backbone.Events); 

然後你的聽衆可以訂閱喜歡這個

MenuComponent.bind("action", this.handleAction, this); 

而且你可以觸發像你已經提到

this.trigger("action", {actionCommand: "save"}); 
+0

美麗事件!哈希是否複製到事件對象中? – 2011-12-23 21:13:47

+0

哈希傳遞給回調,在這種情況下handleAction – Paul 2011-12-23 22:27:52

+0

而傳遞數據呢?這僅用於傳遞*動作* – 2014-07-01 09:53:41