Eventbus/Aggregator for two Requirejs apps

Eventbus/Aggregator for two Requirejs apps

本文关键字:Requirejs apps two for Aggregator Eventbus      更新时间:2023-09-26

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

  • 使用文档对象,因为这对于页面上的所有应用程序都是通用的,无论框架/体系结构如何,例如:
聚合define([], function () {    var eventAgg = document.getElementsByTagName('body')[0],        slice = Array.prototype.slice;    函数 _on() {        var args = slice.call(arguments);        eventAgg.addEventListener(arg[0], arg[1]);    }    函数 _trigger() {        var args = slice.call(arguments);        eventAgg.dispatchEvent(arg[0]);    }    返回 {        开: _on,        触发器:_trigger    };});在应用程序 1 的某个模块中的某个地方define(['jquery',        "下划线",        "骨干",        "调度",        'someView'], function ($, _, Backbone, Dispatch, SomeView) {    ...    Dispatch.on('init', function (e) {...};);    ...});在应用程序 2 的某个模块中的某个地方...var customEvent = new CustomEvent('init', {'status': 'all data load success '});dispatcher.dispatchEvent(event);...
  • 扩展 Backbone.Events 并将事件聚合器注入所有 requirejs 模块(尽管这种方法充其量是挑剔的)。 与上述方法相同,除了我扩展了 Backbone.Events 而不是使用文档对象。

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

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

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