如何使用Backbone.js在多个视图中应用中央调度程序?

时间:2013-05-28 17:21:33

标签: events backbone.js dispatcher

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

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

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

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

我的问题是:

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

任何解决方法?我是否应该从中央调度员那里做错事?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

  1. 使用由所有模型和视图共享的中央事件调度程序。我在这篇有趣的帖子中得到了这个解决方案:
  2. http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/

    1. 使调度程序可以在本文中开发的所有模型和视图本机访问:
    2. 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
      

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

      var extEvents = searchTabEvents;
      
      var searchView = new SearchView({customEvents : extEvents});