1

我正在使用 BackboneJS 开发一个相当复杂的应用程序。我有一个用于发布/订阅事件的 Globals 对象。挑战在于,似乎没有一种有效的方法来使用事件驱动架构解耦功能。

我正在考虑更多像 Magento 这样的事件系统。你看,在 Magento 中,你调用dispatchEvent并传递一个对象。Magento 中的下一行(这将是中断,这意味着它正在等待该事件的所有订阅者首先执行),您可以再次访问这些对象。这种方式的好处是订阅事件的任何函数都会被传递一个它可以修改的对象,然后返回该对象。

因此,当订阅者完成执行后,我们可以获取这个修改后的对象并完成执行。在 JS 中,这将是一个回调,但想法是一样的。

所以我的问题:

  • 您是否知道 Backbone 中有类似的东西?
  • 有你知道的插件吗?

感谢您的时间!

4

1 回答 1

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'}在.oconsole.loggo

演示:http: //jsfiddle.net/ambiguous/4XCmc/

标准的 Backbone 事件当然有它们自己为侦听器指定的参数列表,但您可以添加任何您需要的自定义事件。

于 2012-02-07T22:56:11.717 回答