Магистральная связь между представлениями, другой шаблон
Я читал о посреднике, агрегаторе событий, использовании, backbone.events ... и т. Д.
Мне нужно сообщить о другой потенциальной модели ниже, вы думаете, это зло? или хорошо? если не хорошо, каковы предостережения / проблемы.
Этот "шаблон" отвечает на очень классический вопрос. Когда вы нажимаете что-то на View1, View2 должен рендериться. View1 и View2 независимы (это не случай subview). Между View1 и View2 мы будем использовать модуль "Действия" (да, более или менее вдохновленный реагированием / потоком).
Вот план в псевдокоде:
View1:
initialize:
Actions.subscribe(this, 'view2);
View2:
onclickwtv:
Actions.displayView2();
Actions:
this._Views = [];
subscribe(view, viewName):
this._Views[viewName] = view;
displayView2:
this._Views['view2'].render(); // or show or wtv function needed
Когда представление удаляется, мы вызываем функцию отмены подписки в действиях, которые выталкивают конкретное представление из массива _Views.
Цель этой схемы - получить представление о различных потенциальных взаимодействиях между представлениями (вместо агрегатора событий, где у вас нет центрального места для просмотра этих взаимодействий).
Не могу дождаться, чтобы прочитать ваши мысли об этом!
1 ответ
Я бы сделал View2 вызвать событие на объекте агрегатора:
onclickwtv: function () {
Aggregator.trigger('wtc-click');
}
И я бы хотел, чтобы View1 подписался на это событие:
initialize: function () {
this.listenTo(Aggregator, 'wtc-click', this.render);
}
Когда View1 подписывается на Actions, так что Actions может вызывать View1.render() - это простой способ достижения того же самого. У вашего решения есть три объекта принятия решений, у моего - только два. И мое решение не требует управления состояниями представления - представление прекратит слушать агрегатор, когда его .remove()
метод называется.