在骨干中从一个视图向另一个视图发射事件

Cha*_*erj 22 jquery backbone.js

我有一个主视图,在主视图内部,我有另一个视图,当我单击一个按钮时,它会被创建.有没有办法在父视图上侦听从子视图触发的事件的自定义事件.我试图通过使用jQuery触发器的el属性来完成它,但这并不是很有效.

Der*_*ley 44

呀,没问题......你会想要使用"Event Aggregator"模式.它是Backbone中的一行代码:

var eventAgg = _.extend({}, Backbone.Events);

现在,您可以在应用程序的任何位置触发/绑定来自此对象的事件,并让应用的不同部分以分离的方式相互通信.

我用这个很多!

我也博客更多关于它在这里:http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

  • +1.我更进一步,将事件聚合器注入到每个视图中:`Backbone.View.prototype.eventAggregator = _.extend({},Backbone.Events);`.通过这样做,每个视图在每次构造时都会获得事件聚合器. (14认同)
  • 您的事件聚合器不是简化的"视图状态模型"吗?不会`viewModel = new Backbone.Model()`更优雅吗?至少那种不同的视图可以绑定到视图模型中的*changes*,而不是任意事件.例如`viewModel.bind('change:selectedFoo',aView.render)`vs`eventAgg.bind('selectedFooChanged',aView.render)`.思考? (3认同)
  • @crescent新鲜 - 没有.模型具有语义含义,是某个实体的有状态表示.它具有操纵这些属性的属性和方法.事件聚合器是一个无状态对象,它只通过使用事件来协调系统的各个部分,从而允许更加分离的体系结构.http://martinfowler.com/eaaDev/EventAggregator.html (2认同)