我有一个带有多个backbone.js 视图的单页Web 应用程序。观点有时必须相互沟通。两个例子:
- 当有两种方式视图同时以不同方式呈现集合时,并且对一个视图中的项目的点击必须转发到另一个视图。
- 当用户转换到流程的下一个阶段时,第一个视图将数据传递到第二个视图。
为了尽可能地解耦视图,我目前使用自定义事件来传递数据($(document).trigger('customEvent', data)
)。有一个更好的方法吗?
一种广泛使用的技术是扩展Backbone.Events
-创建您个人的全球事件聚合器的对象。
var vent = {}; // or App.vent depending how you want to do this
_.extend(vent, Backbone.Events);
根据您是否使用 requirejs 或其他东西,您可能希望将其分离到自己的模块中或使其成为 Application 对象的属性。现在您可以在应用程序中的任何位置触发和侦听事件。
// View1
vent.trigger('some_event', data1, data2, data3, ...);
// View2
vent.on('some_event', this.reaction_to_some_event);
这还允许您使用事件聚合器在模型、集合、路由器等之间进行通信。这是 Martin Fowler 的事件聚合器概念 http://martinfowler.com/eaaDev/EventAggregator.html(不是在 JavaScript 中)。这是一个更多骨干 http://lostechies.com/derickbailey/2012/04/03/revisiting-the-backbone-event-aggregator-lessons-learned/对该主题的实现和反思更多地遵循 Backbone.Marionette 的风格,但其中大部分适用于普通 Backbone。
希望这有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)