Магистральные локальные хранилища и отношения
У меня есть две реляционные модели, ученик и школа. В школе много учеников. Все данные должны храниться в Backbone.localStorage
Мне нужен совет, как сделать следующее:
- Я полагаю, мне нужно две коллекции, по одной для каждой модели, ученик и школа?
- Я запутался в том, как хранить данные, используя localStorage. Должна ли каждая коллекция хранить данные в своем локальном хранилище?
1 ответ
Я понимаю, что вы используете https://github.com/jeromegn/Backbone.localStorage для создания локального хранилища с помощью backbone.js.
На мой взгляд, вам понадобятся две коллекции - SchoolsCollection
а также StudentsCollection
, SchoolsCollection
будет реализовывать локальную линию хранения:
var SchoolsCollection = Backbone.Collection.extend({
localStorage: new Backbone.LocalStorage("schools")
});
В SchoolsCollection
вы бы сохранили модели типа SchoolModel
, Экземпляры SchoolModel
будет нести атрибут с именем students
быть примером StudentsCollection
,
Это приведет к тому, что местное хранилище будет выглядеть примерно так
key: schools
value: afe5a7bd,afe5a7bd
key: schools-afe5a7bd
value: {"name":"MIT","students":[{"name":"Joe"}],"id":"afe5a7bd"}
key: schools-afe5a7bd
value: {"name":"Eaton","students":[{"name":"Max"}],"id":"afe5a7bd"}
Как вы видете, StudentModel
теряет свой тип при сериализации. Вы должны реализовать parse()
в SchoolModel
чтобы дополнить этот эффект:
var SchoolModel = Backbone.Model.extend({
parse: function(response) {
return _.extend({}, response, {
students: new StudentCollection(response.students)
});
}
});
Модель одной школы восстанавливается parse()
с индивидуальной обработкой его атрибута students
, Новый StudentsCollection
создается с массивом объектов, содержащих пары ключ-значение, описывающие модель каждого учащегося.