Должны ли связанные представления Backbone.js иметь ссылки друг на друга или общаться только через события?

У меня есть приложение, которое делает CRUD для коллекции моделей. Для каждой модели есть DisplayView, который всегда виден. Существует также EditView, который виден только при нажатии на связанный DisplayView.

DisplayView и EditView появляются внутри разных родительских представлений. Сейчас я использую паттерн "агрегатор событий", чтобы сообщить моему приложению, что нужно отобразить EditView при нажатии на DisplayView. Шаблон описан здесь: http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

Когда один из моих DisplayView нажимается, он запускает событие, которое слушает родитель EditViews. Когда он получает это событие, он рендерит соответствующий EditView, основываясь на модели, для которой было запущено событие.

Это хорошо работает для большей части моего приложения, но особенно громоздко, когда я хочу, чтобы EditView менял позицию на основе абсолютной позиции связанного DisplayView в моем приложении. Вместо того чтобы DisplayView непосредственно управлял положением EditView, он вызывает событие "пожалуйста, переместите себя в эти координаты". Такая прямая связь не кажется чем-то, что должно транслироваться на все приложение. Я начинаю задумываться, не следует ли в моем случае просто иметь ссылку на соответствующий EditView как свойство каждого DisplayView, а не разделять их.

Проблема, как я уже сказал, в том, что они отображаются внутри разных родительских представлений. DisplayViews отображаются в HeaderView, а EditViews отображаются в ContentView.

Как другие справляются с подобными ситуациями? EditView в некотором смысле принадлежит DisplayView, но это не соответствует тому, как структурирован DOM моего приложения. Если предположить, что я создам прямую связь между каждым EditView и DisplayView, то как я буду управлять отображением/скрытием EditView? Нужна ли DisplayView также ссылка на контейнер ContentView, который он будет отображать явно с соответствующим EditView в качестве параметра?

12
задан aw crud 9 January 2012 в 15:47
поделиться