В Backbone, я предпочитаю использовать некоторые сортировать шаблон публикации/подписки для связи между представлениями. В это самая простая форма, ваш код будет выглядеть примерно следующее:
/* Create an Event Aggregator for our Pub/Sub */
var eventAggregator = _.extend({}, Backbone.Events);
/* Pass that Event Aggregator to our Child Views */
var childView1 = new ChildView1({ "eventAggregator": eventAggregator });
/* From here we can just bind/trigger off of eventAggregator whenever we need */
eventAggregator.bind("tellChild", function(e) { alert(e.message); });
eventAggregator.trigger("tellChild", { "message": "hello" });
Обратите внимание, как мы создаем новый объект, который простирается от встроенного в Backbone.Events
и передачи его в ChildView1
. Внутри ChildView или где-либо еще, у которого есть ссылка на eventAggregator, вы можете связывать/запускать новые события. Тем не менее, это верхушка айсберга, поскольку вам нужно будет больше не знать об этом обработчике событий, отвязывая обработчик событий и гарантируя, что вы не просачиваете память.
Здесь недостаточно места, чтобы углубиться в это, поэтому я бы рекомендовал больше узнать о агрегации событий в Backbone. Вся моя логика, которую я когда-либо использовал, вытекает из работы, которую Дерик Бэйли написал в blog posts и его книге «Building Backbone Plugins» (оба источника превосходства информации). В конечном итоге это было связано с его работой по созданию Marionette, что является хорошим дополнением к Backbone. Если вы не хотите беспокоиться об этих проблемах или просто хотите получить более простой API, я рекомендую использовать Marionette или что-то подобное, чтобы улучшить ваши Магистральные виды.
Я согласен с этим подходом. Но я хочу сохранить объект агрегатора событий в parentView (например, ComponentView). –
Да, вы можете это сделать. Просто создайте компонент ComponentView агрегатор событий и перейдите в ChildView1 и ChildView2, когда они будут созданы. – scottheckel