我正在使用一个带有中央调度程序的Backbone.js应用程序和名为AppView的中央视图。
在初始化程序中,我向中央调度员声明:
this.dispatcher = _.extend({}, Backbone.Events);
此调度程序将传递到应用程序的每个视图。每个人都可以触发和/或绑定此调度程序的自定义事件。通过这种方式,我假装允许视图之间的通信而不引用嵌套视图/等。
我的问题是:
如果我有多个视图侦听同一事件,当x事件由某人触发时,所有这些视图都可以响应它。我的问题是:根据应用程序的上下文(流程),并非所有的侦听器都应该对该事件作出反应......
任何解决方法?我是否应该从中央调度员那里做错事?
谢谢!
答案 0 :(得分:0)
我认为您可能需要"Mediator",它会将事件和您的自定义事件广播到订阅它的每个视图。
答案 1 :(得分:0)
我最近遇到了类似的情况并寻找解决方案我发现了不同的解决方案:
http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/
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});