我有许多 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/