Javascript 还可以共享全局事件的唯一主干事件总线

Javascript 还可以共享全局事件的唯一主干事件总线,javascript,backbone.js,backbone-events,Javascript,Backbone.js,Backbone Events,我想有多个独特的事件总线,也听取全球事件。以下是我希望看到的输出: global triggered on a by master global triggered on b by master search triggered on a by a search triggered on b by b 这是我的密码: var master = Backbone.Events; // when this is attached a listens to b and b listens to a

我想有多个独特的事件总线,也听取全球事件。以下是我希望看到的输出:

global triggered on a by master
global triggered on b by master
search triggered on a by a
search triggered on b by b
这是我的密码:

var master = Backbone.Events;
// when this is attached a listens to b and b listens to a
// when this isn't attached no one listens to the global event
// master.on('fake', function(){});
var a = $.extend({}, master);
var b = $.extend({}, master);

function respond(bus, event, by) {
    $('#log').append('<div><code>' + event + '</code> triggered on <code>' + bus + '</code> by <code>' + by + '</code></div>');
}
a.on('global', function (by) { respond('a', 'global', by); });
b.on('global', function (by) { respond('b', 'global', by); });

a.on('search', function (by) { respond('a', 'search', by); });
b.on('search', function (by) { respond('b', 'search', by); });

master.trigger('global', 'master');
a.trigger('search', 'a');
b.trigger('search', 'b');

这是一个和这是。

发生这种情况是因为您从同一主对象进行扩展,因此您正在所有IStance上注册事件

我基于两个不同的渠道提出此解决方案:

var master = Backbone.Events;
var Bus = (function(){    
    function Bus(){
        this.vent = {};
        _.extend(this.vent, Backbone.Events);
        this.globalVent = master;
    }
    return Bus;
})();

var a = new Bus();
var b = new Bus();

function respond(bus, event, by) {
    $('#log').append('<div><code>' + event + '</code> triggered on <code>' + bus + '</code> by <code>' + by + '</code></div>');
}
a.globalVent.on('global', function (by) {
    respond('a', 'global', by);
});
b.globalVent.on('global', function (by) {
    respond('b', 'global', by);
});

a.vent.on('search', function (by) {
    respond('a', 'search', by);
});
b.vent.on('search', function (by) {
    respond('b', 'search', by);
});

master.trigger('global', 'master');
a.vent.trigger('search', 'a');
b.vent.trigger('search', 'b');
这是一张工作票