Магистральная связь между представлениями, другой шаблон

Я читал о посреднике, агрегаторе событий, использовании, 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() метод называется.

Другие вопросы по тегам