2011-12-23 25 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