Какая соответствующая гранулярность для Backbone.js Views?

Я принимаю Backbone.js для рендеринга небольшого угла существующего большого веб-приложения. Если это будет хорошо, я могу увидеть, что Backbone.js растет, чтобы охватить все приложение, предоставив некоторую столь необходимую структуру органически взрослому приложению. Это предисловие. Теперь о проблеме:

У меня есть поле выбора, которое позволяет пользователю выбирать план чтения. Когда выбор изменяется, в представлении обновляется некоторый описательный текст, интерфейс календаря и небольшой виджет для маркировки сегодняшних чтений как завершенных. У виджета будет флажок для каждого чтения (один или несколько) в сегодняшней записи и кнопка для продолжения чтения следующего дня. (Вы можете увидеть текущую, не-опорную версию этого интерфейса (минус схема завершения) в правой части существующего приложения.

Какова надлежащая степень детализации для каждого представления? Я определил следующие "fiddly bits":

  • Сама вкладка, которая охватывает все содержащиеся элементы управления.
  • Поле выбора
  • Описательный текст, который отвечает на поле выбора
  • Календарь, который отвечает на поле выбора
  • Виджет чтения, который отвечает на поле выбора, и содержит:
    • Необязательно, кнопка "Пуск", которая активирует текущий план.
    • При активации один или несколько флажков, соответствующих отдельным показаниям в течение сегодняшней записи.
    • При активации кнопка "Далее", которая завершает сегодняшнюю запись и отображает следующую.

Должен ли каждый из этих пулевых точек получить свой собственный вид? Только основные части (вкладка, флажок, виджет)? Первое приведет к появлению множества представлений. Первое похоже, что это может привести к чрезмерной реализации View. Что лучше?

Примечание. Я понимаю, что это можно интерпретировать как дико-субъективный вопрос, но я все еще обнимаю вокруг шаблонов Backbone.js и Javascript/DOM MVC, и я надеюсь, что существует узкое "это что предназначено/работает лучше всего" у более опытных практиков Backbone.js. Спасибо!

Ответ 1

Нет окончательного ответа на ваш вопрос. Вы можете взглянуть на зернистость проростков для образцов.

Вы также можете посмотреть http://vimeo.com/17186379, где Иегуда Кац иллюстрирует трудности с обновлением разных частей страницы.

Один из способов взглянуть на это - проверить, какая часть должна быть обновлена ​​с различными изменениями/событиями модели и попытаться минимизировать рендеринг.

Извините, нет хороших ответов, как вы указали;)

Ответ 2

В целом, гранулярность ваших взглядов будет зависеть от нахождения баланса между сложностью конкретного фрагмента пользовательского интерфейса и чрезмерной фрагментацией представлений на маленькие кусочки. Я, вероятно, не буду использовать представление для чего-то такого же маленького, как кнопка (для этого нужен класс CSS).

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

Что касается обновлений модели и повторной рендеринга, вся идея с Backbone заключается в том, чтобы отделить эту озабоченность от представлений. Модели генерируют "изменения" событий, когда их атрибуты меняются, и какие бы представления ни находились на странице в то время и отображали данные конкретной модели, будут уведомлены об этом изменении и могут обновляться.