我正在使用backbone.js作为MVC框架编写标签菜单组件。当用户单击选项卡时,组件将切换选项卡(内部操作),但我希望组件的侦听器响应与该事件关联的操作。这背后的想法是我将各种点击抽象为具体行动。例如,每个选项卡的模型都是具有以下结构的哈希:
{
label : <string>,
actionCommand : "save",
tabClass : <string>
}
将被触发的事件将被称为“操作”,因此侦听器将响应“操作”,但随后将转发特定命令。例如:
this.trigger("action", {actionCommand: "save"});
反过来,侦听器将处理与以下内容类似的事件:
handleAction : function(event) {
if (event.actionCommand == "save") {
...do something...
}
}
这可能吗?我无法从文档中收集到这些信息。提前感谢您提供的任何见解。
答案 0 :(得分:30)
是的,这可以通过Backbone实现。
您可以使用“事件”模块来允许对象绑定和触发自定义命名事件。
在您的情况下,您需要将“事件”模块添加到菜单组件对象中。如果此对象是Backbone Model,那么它已经具有Events模块。如果没有,那么您可以使用以下代码添加它
_.extend(MenuComponent, Backbone.Events);
然后你的听众可以像这样订阅
MenuComponent.bind("action", this.handleAction, this);
你可以像你已经提到的那样触发事件
this.trigger("action", {actionCommand: "save"});