Магистральные локальные хранилища и отношения

У меня есть две реляционные модели, ученик и школа. В школе много учеников. Все данные должны храниться в 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 создается с массивом объектов, содержащих пары ключ-значение, описывающие модель каждого учащегося.

Другие вопросы по тегам