我正在使用BackboneJS开发一个相当复杂的应用程序。我有一个Globals对象,用于发布/订阅事件。挑战在于,似乎没有一种有效的方法可以使用事件驱动架构来解耦函数。
我正在考虑更多像Magento这样的事件系统。你会看到,在Magento,你打电话给dispatchEvent
,然后传递一个物体。 Magento的下一行(意思是,它正在等待该事件的所有订户首先执行),您可以再次访问这些对象。这种方式的好处是,任何订阅该事件的函数都会传递一个它可以修改的对象,然后返回该对象。
因此,当订阅者完成执行后,我们可以获取此修改后的对象并完成执行。在JS中,这将是一个回调,但这个想法是一样的。
所以我的问题:
感谢您的时间!
答案 0 :(得分:2)
您可以定义自己的事件,并将任何参数传递给您想要的事件处理程序。例如,您可以定义事件并在触发该事件时传递对象:
var M = Backbone.Model.extend({
go: function() {
var o = { };
this.trigger('some:event', o);
console.log(o);
}
});
然后听众可以在他们得到的对象中存储他们想要的任何东西作为参数:
var m = new M;
m.on('some:event', function(o) {
o.where_is = 'pancakes house?';
});
m.on('some:event', function(o) {
o.ill_cook = 'you some eggs, Margie';
});
m.go();
当您点击{where_is: 'pancakes house?', ill_cook: 'you some eggs, Margie'}
中的o
来电时,console.log
go
将会离开您。
演示:http://jsfiddle.net/ambiguous/4XCmc/
标准的Backbone事件当然有监听器自己指定的参数列表,但是你可以添加你需要的任何自定义事件。