我有许多骨干模型,以集合的形式组织,并连接到它们相应的视图和/或视图集合。其中一些不属于同一集合的模型需要触发另一个模型(可能不止一个)感兴趣的事件。
我认为,解决这个问题的推荐方法是here和其他地方所描述的“全局事件分派器/聚合器”。
但是,我也碰巧使用了require.js,这似乎与将分派器/聚合器附加到应用程序的名称空间对象的想法背道而驰--或者我错了?
所以我的问题是:使用require.js,我如何让许多不同的主干模型触发一个将由另一个模型处理的事件?
发布于 2012-09-13 19:42:01
一个与@Andreas提出的类似的解决方案,但没有Backbone.Marionette (尽管如此,see the article linked in the question还是受到了很大的启发)。
您所要做的就是定义一个模块,该模块创建一个事件侦听器的单例,并在您想要触发事件或侦听此事件的模块中需要此对象。
假设您有定义通道的app/channel.js
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');
});
});
您可以通过以下方式在此通道上触发事件
require(['app/channel'], function (channel) {
channel.trigger('app.event');
});
https://stackoverflow.com/questions/12401530
复制相似问题