Backbone.js: сложные представления, объединяющие несколько моделей
Пока все тесты и учебные пособия, которые я пытался, чтобы получить структуру в моей голове, показывают мне, что представление привязано к 1 модели.
говорит, что у меня есть небольшое приложение для хранения и управления контактными данными (адресная книга)
У меня есть несколько пользователей, которые могут войти в систему
и каждый из них имеет свою собственную коллекцию контактов.
пользовательский подробный вид будет привязан к пользовательской модели
то же касается контактов
но скажу, что я хотел бы показать сетку, объединяющую эти два
Ось X, показывающая все контакты в приложении
Ось Y, показывающая всех пользователей,
как это работает? мне нужно создать новую модель для этого, связать с новым представлением?
вы получаете идею, ее просто теоретический пример, я не создаю это приложение, но его идея получить представление, объединяющее несколько моделей
Ответы
Ответ 1
В этом случае я бы рассмотрел динамическую модель с двумя вашими подмоделями. В обработчике маршрута вы можете сделать что-то вроде этого:
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})
Я по-прежнему предпочитаю композитный подход первого, потому что он не сближает то, что такое модель.
Ответ 2
Вы также можете рассмотреть возможность слияния обеих моделей, если вы уверены, что они не используют одни и те же параметры.
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()
, а также