У меня есть приложение, которое делает 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
в качестве параметра?