1

我正在使用带有中央调度程序和称为 AppView 的中央视图的 Backbone.js 应用程序。

在初始化程序中,我声明中央调度程序:

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

该调度程序被传递给应用程序拥有的每个视图。每个都可以触发和/或绑定到此调度程序的自定义事件。通过这种方式,我假装允许视图之间的通信,而无需引用嵌套视图 / 等。

我的问题是:

如果我有多个视图监听同一个事件,当 x 事件被某人触发时,所有这些视图都可以响应它。我的问题是:根据应用程序的上下文(流),并非所有的侦听器都应该对该事件做出反应......

任何解决方法?我做错了中央调度员应该做的事情吗?

谢谢!

4

2 回答 2

0

我认为您可能需要“Mediator”,它将向订阅它的每个视图广播事件和您的自定义事件。

于 2013-05-29T01:00:25.377 回答
0

我最近遇到了类似的情况并寻找解决方案,我发现了不同的解决方案:

  1. 使用由所有模型和视图共享的中央事件调度程序。我在这篇有趣的帖子中得到了这个解决方案:

http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/

  1. 在本文中开发的所有模型和视图都可以本地访问调度程序:

http://devlicio.us/blogs/mike_nichols/archive/2011/10/20/backbone-events-and-aggregator-update.aspx

根据我的经验,为了使代码保持良好状态,避免使用中央调度程序是值得的。我们为应用程序的每个模块创建一组调度程序(每个模块可以包含需要相互通信的不同视图):

var searchTabEvents = _.extend({}, Backbone.Events); //handler events for the search tab
var visualizationEvents = _.extend({}, Backbone.Events); //handler events for the visualization tab

当我们创建视图时,我们传递给视图的approopiatte事件处理程序:

var extEvents = searchTabEvents;

var searchView = new SearchView({customEvents : extEvents});
于 2013-07-25T10:01:08.440 回答