2012-01-29 2 views
3

Предположим, у меня есть большая коллекция моделей изображений, и в любой момент на самом деле отображаются только 50 уменьшенных изображений. Я хочу дать пользователю возможность увидеть еще 50 случайных изображений из коллекции ... поэтому я подумал о том, чтобы дать каждой модели изображения атрибут onDisplay.В backbone.js, Неправильно ли модель знать о ее представлении?

Шоу-случайный метод выбирает 50 случайных предметов и устанавливает onDisplay в true. Некоторые из этих элементов, возможно, уже были обработаны ... если нет, то создается новое представление эскизов и прикрепляется к модели изображения. Если представление уже было отображено, оно просто перерисовано/прикреплено к DOM.

Проверка существования вида кажется наиболее легко выполненной, если модель имеет указатель на нее. Но я нарушаю разделение проблем здесь?

ответ

8

В шаблоне проектирования MVC модель не должна знать ничего о представлении. Это, например, позволяет рассматривать модель более чем одним способом, скажем, либо как HTML, либо отображаться в элементе canvas.

Это можно увидеть на следующей диаграмме:

MVC

Модель может обновить вид только косвенно, например, путем стрельбы.

Изображение скопировано из here.

0

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

С точки зрения модели, это вызов общей функции «дайте мне представление». Это функция, которая обрабатывает кеширование. Затем вы можете изменить эту функцию, чтобы изменить поведение, без необходимости напрямую изменять модель.

1

Да, я согласен, вам не нужно связывать свою модель с их взглядами.

Атрибут onDisplay является хорошим. Если все ваши модели изображений находятся в коллекции, просто попросите другое родительское представление прослушать изменения атрибута onDisplay в коллекции.

Если атрибут изменяется, «родительский» вид может затем визуализировать/удалять представления эскизов (как они будут в виде представлений) по мере необходимости.

 Смежные вопросы

  • Нет связанных вопросов^_^