我有一个主视图,并在该主视图中有另一个视图,当我单击按钮时会创建该视图。有没有办法在父视图上侦听从子视图触发的事件的自定义事件。我试图通过使用jQuery触发器的el属性来做到这一点,但这并不奏效。在骨干中从一个视图触发事件到另一个视图
回答
雅,没问题......你会想要使用“事件聚合器”模式。这是在骨干网1行代码:
var eventAgg = _.extend({}, Backbone.Events);
现在你可以触发/绑定事件从此对象,无处不在您的应用程序,并让您的应用程序的不同部分相互处于分离的方式沟通。
我用这个很好!
+1。我更进一步,将事件聚合器注入到每个视图中:'Backbone.View.prototype.eventAggregator = _.extend({},Backbone.Events);'。通过这样做,每个视图在每次构建时都会获取事件聚合器。 –
是不是你的事件聚合器只是一个简化的“视图状态模型”? 'viewModel = new Backbone.Model()'不会更优雅吗?至少,不同视图可以绑定到视图模型中的*更改*,而不是任意事件。例如'viewModel.bind('change:selectedFoo',aView.render)'vs'eventAgg.bind('selectedFooChanged',aView.render)''。思考? –
@新月新鲜 - 没有。一个模型具有语义含义,是一些实体的有状态表示。它具有操纵这些属性的属性和方法。事件聚合器是一种无状态的对象,它只通过使用事件来协调系统的某些部分,从而允许更加分离的体系结构。 http://martinfowler.com/eaaDev/EventAggregator.html –
这里是另一种方法,那可能是谁正在寻找一种简单的方法,人们更直观的“泡沫”事件了从子视图到父视图:
https://github.com/dgbeck/backbone.courier
有关于如何比较事件聚合自述一些讨论。
因为Backbone将Events对象直接混合到其名称空间中的Backbone对象,所以不需要滚动您自己的“事件聚合器”或mediator或pubsub(如上所述)。这里有一个link的源代码及其实现文档。
允许Backbone对象作为全局事件总线,用于希望在一个方便的地方使用全局“pubsub”的人们。
- 1. 触发从一个视图到另一个视图的事件
- 2. 骨干视图触发全球事件
- 3. 只传递一些触摸事件从一个视图到另一个视图
- 4. 视图中的每个按钮都会触发骨干事件?
- 5. 如何将触摸事件从一个视图传递到另一个视图
- 6. 绑定并触发骨干事件到一个特定的视图
- 7. 第一次事件触发后骨干视图不会更新
- 8. 骨干视图从两个视图
- 9. 骨干子视图事件
- 10. 骨干:一个模型两个视图?
- 11. 当在一个骨干视图
- 12. 将视图从一个视图移动到另一个视图
- 13. 在WPF中从一个视图导航到另一个视图
- 14. 在触发两个事件之后在骨干视图中的火焰动作
- 15. 在骨干视图中放置事件
- 16. 将触摸事件转发到另一个视图,该视图被接收事件的视图部分覆盖
- 17. 骨干事件触发器在不同视图之间协调
- 18. 骨干点击事件没有在动态视图上触发
- 19. 在骨干视图中调用另一个函数Backbone.js
- 20. Swift将选择器触发到另一个视图的视图
- 21. emberjs从另一个视图转到另一个视图
- 22. 骨干:触发另一个div显示
- 23. 在多个视图中触发事件
- 24. 骨干子视图事件不会触发,访问this.model丢失
- 25. 骨干牵线木偶复合视图没有触发事件
- 26. 骨干视图触发事件委托多次
- 27. 骨干视图更改el属性时不会触发事件
- 28. 重新渲染子视图后,骨干事件触发多次
- 29. 骨干视图上的事件不会触发
- 30. 骨干视图事件不会触发区别
一个小例子代码会有所帮助。 – erturne