我有两个应用程序(可能会或可能不会使用主干 + 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 而不是使用文档对象。
对于提供全局事件聚合器,这些方法似乎都不“正确”,但我无法想出更好的方法。有什么建议么?