在Backbone.js中我的路由器可以使用eventAggregator (Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events);)
对象的最佳方法是什么,而不将其作为参数传递。
我有一个mainController(一个没有渲染的视图),我正在实例化Backbone.View.prototype.eventAggregator
。
我也在mainController中创建我的路由器,但只有View会有eventAggregator而不是路由器。
我不想再往前走,做Backbone.prototype.eventAggregator以便路由器可以拥有它。有没有更简洁的方法呢?
答案 0 :(得分:2)
Backbone已经内置了你可以使用的东西(来自Backbone源代码):
// Allow the `Backbone` object to serve as a global event bus, for folks who
// want global "pubsub" in a convenient place.
_.extend(Backbone, Events);
然后在路由器中:
Backbone.trigger('something');
并且在视野中:
this.listenTo(Backbone, 'something', this.someMethod);
或者反过来取决于你想要做什么。
答案 1 :(得分:1)
正如Paul所提到的,所有骨干对象(包括路由器)都扩展了Event对象,因此您可以在这些对象上设置事件侦听器。但我明白为什么要集中管理事件,这样就不需要在各种对象上设置事件监听器,也不需要传递事件聚合器。
Derick Bailey在下面的帖子中谈到了这一点,他提出的解决方案是创建一个App级事件聚合器。
另外,如果您正在做比“待办事项”应用程序更复杂的事情,我建议您查看一些Backbone框架,例如Chaplin,Marionette,样板等。您可以找到列表{{3 }}
在我的应用程序中,我使用的是Marionette框架,并发现它在创建模块化,易于维护的代码时非常有用,并且已经处理了很多通常的重复代码。