В backbone.js, это неправильно для модели, чтобы знать о ее представлении? - PullRequest
3 голосов
/ 29 января 2012

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

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

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

Ответы [ 3 ]

8 голосов
/ 29 января 2012

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

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

MVC

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

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

1 голос
/ 29 января 2012

Да, я согласен, вам не нужно связывать вашу модель с такими представлениями.

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

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

0 голосов
/ 29 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...