我有两个应用程序(更多可能会或可能不会使用backbone + requirejs),都是使用backbone + requirejs开发的。我想创建一个eventbus,两个应用程序都可以在其上发布和订阅特定事件。我考虑了两个选项,两者都有自己的低效率。其中包括:
// 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); ...
这两种方法对于提供全局事件聚合器似乎都不正确,但我还没有能够提出更好的方法。有什么建议吗?
答案 0 :(得分:1)
Backbone本身就是一个事件总线。这可能是最直接的做法。
Backbone.on('myevent:app1', function(){alert('sup');})
Backbone.trigger('myevent:app1');