Как гуру MVC справится с этими изменениями атрибутов модели и их последствиями для контроллера?

Я разрабатываю приложение JavaScript, которое должно отображать визуализацию либо на основе настроек в хеше URL, либо на основе взаимодействия с пользователем.

(На данный момент я использую Backbone.js для MVC, но я думаю, что эти вопросы можно считать независимыми от фреймворка...?)

Допустим, пользователь просматривает состояние приложения с выбранными индикаторами A и B. Пользователь меняет индикатор B на C, что происходит?

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

... и тогда, конечно, изменение индикатора повлияет на разные представления:

  • Доступные объекты для отображения изменятся
  • Весы будут меняться
  • Метка индикатора изменится и т.д. и т.п...

На данном этапе возникает один вопрос: что делать со всеми этими зависимыми/вычисляемыми переменными?

Должна ли модель в этом случае также отслеживать доступность данных, масштаб и т. д. на основе изменения индикатора? И должен ли он также запускать события изменения для всех этих вычисляемых атрибутов?

В любом случае, «главный контроллер визуализации» теперь должен быть уведомлен об обновлении модели, но как это сделать?

В этом случае произошло изменение индикатора, которое должно привести к добавлению и удалению значков, изменению меток и т. д. и т. д.

В другом сценарии может измениться только год. Должен ли Контроллер запустить другой путь?

А в третьем сценарии могут измениться и год, и индикаторы (например, когда установлен начальный хэш URL)... еще один набор функций, которые будут запускаться в цепочке?

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




Ответы (1)


Я ОЧЕНЬ новичок в backbone.js, так что примите мое предложение как соль, с небольшим шансом на то, что там будет что-то стоящее.

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

this.model.bind('change:propertyA', _.bind(this.renderA, this));
this.model.bind('change:propertyB', _.bind(this.renderB, this));
person rkw    schedule 18.08.2011
comment
Спасибо за ваш вклад, я думаю, вы что-то там. Я использовал несколько похожий подход, чтобы заставить контроллер выбирать разные пути на основе набора изменений атрибутов. На самом деле я ничего не имею против разделения контроллера на множество, но я больше придерживаюсь некоторых общих рекомендаций, когда у вас есть изменения атрибутов модели, которые могут иметь так много зависимых переменных и последствий. - person dani; 19.08.2011