Backbone.js: сложные представления, объединяющие несколько моделей - PullRequest
31 голосов
/ 12 сентября 2011

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

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

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

но скажите, что я хотел бы показать сетку, объединяющую эти два Ось X показывает все контакты в приложении Ось Y показывает всех пользователей,

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

Вы понимаете, это просто теоретический пример. Я не создаю это приложение, а хочу получить представление о том, чтобы объединить несколько моделей

Ответы [ 2 ]

50 голосов
/ 12 сентября 2011

В этом случае я бы рассмотрел динамическую модель с обеими вашими подмоделями.В вашем обработчике маршрутов вы можете сделать что-то вроде этого:

var model = new Backbone.Model();
model.set({contacts: new ContactsModel(), users: new UsersModel()});
var view = new GridView({model: model});

Конечно, ничто не мешает вам передавать модели по отдельности:

var contacts = new ContactsModel();
var users = new UsersModel();
var view = new GridView({model: contacts, users: users})

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

7 голосов
/ 11 июля 2012

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

var modelA = new myModel({ color: "blue" });
var modelB = new otherModel({ age: 35 });

var superModel = new Backbone.Model();
superModel.set(modelA);
superModel.set(modelB);

console.log("color:", superModel.get("color"));
console.log("age:", superModel.get("age"));

взгляните также Backbone.Model.extend()

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