Я понимаю, что вы используете 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
создан с массивом объектов, содержащих пары «ключ-значение», описывающие модель каждого ученика.
Если я не укажу свойство localStorage в моем StudentsCollection, я получу «Ошибка: свойство или функция« url »должны быть указаны». Кроме того, я не совсем понимаю, как этот файл хранится в StudentModel ... Если я хочу получить коллекцию со всеми учениками в представлении, мне нужно пройти через атрибут учеников школы? – user1121487
@ user1121487 будьте осторожны, чтобы не использовать такие методы, как 'create()' для вложенных коллекций - это может быть причиной указанной ошибки. которые не выполняют ненужную синхронизацию, например 'add()'. для доступа к вашим моделям вы можете попробовать это для первой школы/первого ученика: 'schools.at (0) .get ('students'). at (0)' – jhohlfeld
Недавно я столкнулся с той же проблемой и заблокировал меня в течение длительного времени время. Я думаю, что метод parse() должен быть ключевым пунктом. Но пока не так хорошо знакомы с Backbone, так как это сделать? Можете ли вы дать больше намеков? –