0

У меня есть два RelationalModels, Student и School. В школе много учеников. Все данные должны быть сохранены в Backbone.localStorageМагистраль localStorage и отношения

Мне нужен совет, как необходимо сделать следующее:

  • Я полагаю, нужны две коллекции, один для каждой модели, школьников и студентов?
  • Я смущен о том, как хранить данные, используя localStorage. Должны ли каждый сбор хранить данные в своем собственном localStorage?

ответ

2

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

Как я вижу, вам понадобятся две коллекции - SchoolsCollection и StudentsCollection. SchoolsCollection будет осуществлять восходящую линию локального хранения:

var SchoolsCollection = Backbone.Collection.extend({ 

    localStorage: new Backbone.LocalStorage("schools") 

}); 

В SchoolsCollection вы бы сохранить модели типа SchoolModel. Экземпляры SchoolModel будут иметь атрибут с именем students, имеющий экземпляр StudentsCollection.

Это приведет к LocalStorage взгляд что-то подобное, как

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

+0

Если я не укажу свойство localStorage в моем StudentsCollection, я получу «Ошибка: свойство или функция« url »должны быть указаны». Кроме того, я не совсем понимаю, как этот файл хранится в StudentModel ... Если я хочу получить коллекцию со всеми учениками в представлении, мне нужно пройти через атрибут учеников школы? – user1121487

+0

@ user1121487 будьте осторожны, чтобы не использовать такие методы, как 'create()' для вложенных коллекций - это может быть причиной указанной ошибки. которые не выполняют ненужную синхронизацию, например 'add()'. для доступа к вашим моделям вы можете попробовать это для первой школы/первого ученика: 'schools.at (0) .get ('students'). at (0)' – jhohlfeld

+0

Недавно я столкнулся с той же проблемой и заблокировал меня в течение длительного времени время. Я думаю, что метод parse() должен быть ключевым пунктом. Но пока не так хорошо знакомы с Backbone, так как это сделать? Можете ли вы дать больше намеков? –

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