stavarotti
stavarotti

Reputation: 582

Eventbus/Aggregator for two Requirejs apps

I have two applications (more to be added that may or may not use backbone + requirejs), both developed using backbone + requirejs. I want to create an eventbus on which both applications can publish and subscribe to specific events. I have considered a two options, both of which have their own inefficiencies. These include:

// Aggregator
define([], function () {
    var eventAgg = document.getElementsByTagName('body')[0],
        slice = Array.prototype.slice;

    function _on() {
        var args = slice.call(arguments);
        eventAgg.addEventListener(arg[0], arg[1]);
    }

    function _trigger() {
        var args = slice.call(arguments);
        eventAgg.dispatchEvent(arg[0]);
    }

    return {
        on: _on,
        trigger: _trigger
    };
});

// Somewhere in one of app 1's modules
define(['jquery', 
        'underscore', 
        'backbone', 
        'dispatch',
        'someView'], function ($, _, Backbone, Dispatch, SomeView) {

    ...
    Dispatch.on('init', function (e) {...};);
    ...
});

// Somewhere in one of app 2's modules

...
var customEvent =  new CustomEvent('init', {'status': 'All data loaded successfully'});
dispatcher.dispatchEvent(event);
...

Neither of these methods seem 'correct' for providing an global event aggregator but I have not been able to come up with anything better. Any suggestions?

Upvotes: 0

Views: 271

Answers (1)

Andrew
Andrew

Reputation: 13853

Backbone is itself, an event bus. Which is probably the most straight forward way of doing it.

Backbone.on('myevent:app1', function(){alert('sup');})
Backbone.trigger('myevent:app1');

Upvotes: 1

Related Questions