我有两个RelationalModels,学生和学校。学校有很多学生。所有数据都存储在Backbone.localStorage
中我需要建议如何做以下事情:
答案 0 :(得分: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
。