1

Я нашел этот большой ресурс на модели для расщепления и заменял позвоночник рассматриваетBackbone.js: Расщепление модель между видом

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

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

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

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

+1

«Магистраль говорит, что лучший способ создания новых представлений - создание экземпляра модели». Где это сказано? Я не думаю, что модель должна знать что-либо о взглядах. –

+0

Я не могу найти текст, который я читал раньше, но, возможно, я его неправильно истолковал. Тем не менее, есть ли лучший образец для этого? Может быть, коллекция обрабатывает маршрутизацию вида? – dclowd9901

+0

Хорошо, я думаю, что знаю, что вы читаете. Если у вас есть представление, которое показывает коллекцию, добавление новой коллекции в коллекцию вызовет событие «добавить», к которому подписан вид. Обработчик в представлении создаст новое представление элемента для этой новой модели, добавив его к своей «ul» или «div» или тому, что будет содержать представления элементов ... Таким образом, создание/добавление новой модели вызывает чтобы ответить, создав новое представление элемента. Тем не менее, вся коллекция знает, что в ней есть новая модель, и она должна рассказать любому, кто слушает через свое событие добавления. –

ответ

2

Здесь представлен модифицированный образец от here.

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); 
    } 
}): 

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

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

More info.

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

Есть extensions for Backbone, как (Магистральная магистраль), которые добавляют дополнительную структуру. Вы тоже можете заглянуть в них.

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