2013-05-28 2 views
1

Я использую приложение Backbone.js с центральным диспетчером и центральным представлением под названием AppView.Как применить центральный диспетчер к нескольким представлениям с помощью Backbone.js?

В инициализаторе, я объявляю ЦДУ с:

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

Этот диспетчеру передается каждому смотреть приложение имеет. Каждый из них может инициировать и/или связывать пользовательские события для этого диспетчера. Таким образом, я притворяюсь, чтобы обеспечить связь между видами без ссылки на вложенные просмотры/и т.д.

Моего вопрос:

Если у меня есть несколько видов аудирования на то же событие, когда й событие инициируются кто-то, все эти взгляды могут ответить на него. Моя проблема: в зависимости от контекста (потока) приложения не все слушатели должны реагировать на это событие ...

Любое обходное решение? Я что-то делаю неправильно, чем должен быть центральный диспетчер?

Спасибо!

+2

Возможно, вам нужно различать контекст, используя разные события. Или, возможно, взгляды должны проверять контекст, когда вызываются обработчики событий. Трудно сказать без особых деталей. –

+0

hi mu_is_too_short, я согласен с вашим комментарием выше. Контекст событий можно легко ограничить просмотром группировок и т. Д. Одна вещь, о которой мне интересно в последнее время, помогут объекты контроллера, как обсуждалось в моем вопросе здесь: http://stackoverflow.com/questions/16769087/how-to-design -a-controller-in-backbone-js – poseid

ответ

0

Думаю, вам может понадобиться "Mediator", он будет транслировать событие и ваше пользовательское событие на все виды, которые его подписывают.

+0

Действительно хороший вариант, я не буду использовать сам класс, но он дал мне много идей в том, как реализовать это для себя (в моем следующем проекте определенно даст шанс Mediator.js). Спасибо! – joTa

0

Я недавно столкнуться с подобной ситуацией и ищет решения я нашел Differents решения:

  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

Из моего опыта, чтобы поддерживать в хорошей форме код, стоит избегать использования центральных диспетчеров. Мы создаем набор диспетчеров для каждого модуля приложения (каждый модуль может содержать Differents представления, необходимые для общения каждого из них):

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}); 
Смежные вопросы