20

关于 Backbone 中的事件的一个快速问题 - 有没有办法定义一组全局事件,可以在不同的视图中重复使用?

例如 - 假设我有几个在页面上呈现的视图。每个视图都有一个用于展开菜单的按钮。还有其他几个通用元素和事件。如果不将此事件逻辑放入每个视图中,是否有办法让这些视图中的每一个都可以继承或从全局事件定义中提取这些事件?通过在一个地方定义这些通用事件,它肯定会节省时间并成为更清洁的解决方案。

我见过诸如事件聚合器和工厂模式之类的术语 - 但不确定最佳方法(或者它们是否会实现我所追求的)。

4

1 回答 1

52

您基本上是在描述事件聚合器或调度程序,是的。我有几篇关于在 Backbone 中构建和使用它们的文章:

http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

http://lostechies.com/derickbailey/2012/04/03/revisiting-the-backbone-event-aggregator-lessons-learned/

网上还有很多文章可以对 Backbone 和其他 pub/sub 库做同样的事情。

在 Backbone 中执行此操作非常简单:


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

现在您有了一个vent对象,可以在您的应用程序的所有视图和其他对象中用作事件聚合器。


vent.on("some:event", function(){
  console.log("some event was fired");
});

vent.trigger("some:event");
于 2012-04-06T12:12:55.020 回答