Eventbus / Aggregator用于两个Requirejs应用程序

我有两个应用程序(更多可能会添加,可能会或可能不会使用backbone + requirejs),都是使用backbone + requirejs开发的。 我想创建一个事件总线,在这两个应用程序可以发布和订阅特定事件。 我考虑过两种选择,这两种选择都有其自身的低效率。 这些包括:

  • 使用文档对象,因为这对于页面上的所有应用程序都是通用的,而不管框架/体系结构如何:
  • // 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);
    ...
    
  • 扩展Backbone.Events并将事件聚合器注入到所有的requirejs模块中(尽管这种方法充其量是挑剔的)。 除了我扩展Backbone.Events而不是使用文档对象外,与上述方法相同。
  • 这两种方法都不适合提供全球事件聚合器,但我还没有能够提出更好的方案。 有什么建议么?


    Backbone本身就是一个事件总线。 这可能是最直接的做法。

    Backbone.on('myevent:app1', function(){alert('sup');})
    Backbone.trigger('myevent:app1');
    
    链接地址: http://www.djcxy.com/p/70413.html

    上一篇: Eventbus/Aggregator for two Requirejs apps

    下一篇: Backbone and AMD dependency definitions, parameters vs variables