Backbone.js: разделение модели между представлениями - PullRequest
1 голос
/ 09 февраля 2012

Я нашел этот замечательный ресурс по шаблонам для разделения и подпитки ваших просмотров Backbone

http://ricostacruz.com/backbone-patterns/#sub_views

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

Скажем, например, у меня есть модель User, но у меня есть два контекста для пользователей настр.Для иллюстрации предположим, что это плакат и комментатор.Представление автора (рендеринг и действия) отличается от представления Комментатора.

Бэкбон говорит, что лучший способ создания новых представлений - создание экземпляра модели, поэтому не нужно устанавливать какие-либо произвольные свойства намодель (например, {poster: true} или {commenter: true}) и использование этого свойства и регистра case / switch для указания модели на создание «правильного» представления, каков более независимый и «Backboney» способ решения этой проблемы?

1 Ответ

2 голосов
/ 09 февраля 2012

Вот модифицированный образец из здесь .

var PhotoRouter = Backbone.Router.extend({
  routes: { "photos/:id": "route" },

  route: function(id) {
    var item = photoCollection.get(id);
    var view = new PhotoView({ model: item });
    var view2 = new PhotoView2({ model: item });

    something.html( view.render().el );
    somethingElse.html( view2.render().el );
  }
}):

Теперь у Backbone нет предпочтительного способа структурирования вашего приложения.Вы можете сделать это, создавая и показывая виды в маршрутизаторе.Или иногда полезно создать свой собственный объект AppController, чтобы вы могли оставить маршрутизатор только для маршрутизации.Или вы можете создать BaseView некоторого вида, который будет создавать ваши подвиды ...

Но важно то, что оба ваших представления ничего не знают друг о друге.И оба будут отображать и реагировать на изменения в модели по-своему.Кроме того, модель ничего не знает о представлениях, отображающих ее.

Дополнительная информация .

Еще одна полезная идея - агрегатор событий .Используя это, ваши различные компоненты могут обмениваться данными без сильной связи друг с другом.

Есть несколько расширений для Backbone , таких как (Backbone Marionette), которые добавляют еще больше структуры.Вы можете посмотреть на них тоже.

...