0

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

  • 使用文档对象,因为这对于页面上的所有应用程序都是通用的,无论框架/架构如何,例如:
// 聚合器
定义([],函数(){
    var eventAgg = document.getElementsByTagName('body')[0],
        slice = Array.prototype.slice;

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

    函数_触发器(){
        var args = slice.call(arguments);
        eventAgg.dispatchEvent(arg[0]);
    }

    返回 {
        开:_开,
        触发器:_trigger
    };
});

// 在应用程序 1 的某个模块中的某处
定义(['jquery',
        '下划线',
        '骨干',
        '派遣',
        'someView'], function ($, _, Backbone, Dispatch, SomeView) {

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

// 在应用程序 2 的某个模块中的某处

...
var customEvent = new CustomEvent('init', {'status': '所有数据加载成功'});
dispatcher.dispatchEvent(event);
...
  • 扩展 Backbone.Events 并将事件聚合器注入所有 requirejs 模块(尽管这种方法充其量是挑剔的)。与上面相同的方法,除了我扩展 Backbone.Events 而不是使用文档对象。

对于提供全局事件聚合器,这些方法似乎都不“正确”,但我无法想出更好的方法。有什么建议么?

4

1 回答 1

1

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

Backbone.on('myevent:app1', function(){alert('sup');})
Backbone.trigger('myevent:app1');
于 2013-10-31T20:17:06.543 回答