backbone.js + 全局事件调度程序 + require.js : how-to?

标签 backbone.js requirejs eventaggregator

我有许多 Backbone 模型,它们组织在集合中并连接到相应的 View 和/或 View 集合。其中一些不属于同一集合的模型需要触发另一个模型(可能不止一个)感兴趣的事件。

我认为,处理此问题的推荐方法是“全局事件调度程序/聚合器”,如here所述。和其他地方。

但是,我也碰巧使用了 require.js,这似乎违背了将调度程序/聚合器附加到应用程序的命名空间对象的想法 - 或者我在这里错了?

所以我的问题是:使用 require.js 如何让多个不同的 Backbone 模型触发一个由另一个模型处理的事件?

最佳答案

与 @Andreas 提出的解决方案类似,但没有 Backbone.Marionette(尽管如此,see the article linked in the question 深受启发)。

您所要做的就是定义一个模块,该模块创建事件监听器的单例,并在要触发事件或监听此事件的模块中需要此对象。

假设您有 app/channel.js 定义您的 channel

define(['backbone', 'underscore'], function (Backbone, _) {
    var channel = _.extend({}, Backbone.Events); 
    return channel;
});

然后您可以通过

将其用作监听器
require(['app/channel'], function (channel) {
    channel.on('app.event', function () {
        console.log('app.event');
    });
});

您可以通过以下方式触发此 channel 上的事件

require(['app/channel'], function (channel) {
    channel.trigger('app.event');
});

关于backbone.js + 全局事件调度程序 + require.js : how-to?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12401530/

相关文章:

javascript - Backbone.js 的工作原理图?

javascript - Require.js 和 r.js 包括所有依赖项,甚至是子模块的依赖项

c# - Prism - EventAggregator.GetEvent<>.Subscribe() - 使用泛型和约束

c# - 使用导体和事件聚合器的分层导航

javascript - Backbone.Marionette 布局 : Access region. 直接layout.view

Javascript 通过返回字符串的函数动态对象属性

javascript - 转换 Backbone.js 应用程序以与 parse.com 通信

javascript - 当与 require.js 作为 AMD 模块一起使用时覆盖 underscore.js 默认值

php - Require.js 和 Zend 框架