0

我有两个关系模型,学生和学校。学校有很多学生。所有数据都将存储在 Backbone.localStorage

我需要建议如何执行以下操作:

  • 我想我需要两个系列,每个模型一个,学生和学校?
  • 我对如何使用 localStorage 存储数据感到困惑。每个集合是否应该将数据存储在自己的 localStorage 中?
4

1 回答 1

2

我了解您正在使用Backbone.localStorage来完成带有backbone.js 的本地存储。

在我看来,您需要两个集合 -SchoolsCollectionStudentsCollection. 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()inSchoolModel来补充这种效果:

var SchoolModel = Backbone.Model.extend({
    parse: function(response) {
        return _.extend({}, response, {
            students: new StudentCollection(response.students)
        });
    }
});

parse()通过对其属性的自定义处理来恢复单个学校模型studentsStudentsCollection正在使用包含描述每个学生模型的键值对的对象数组创建一个新对象。

于 2013-12-06T08:43:41.237 回答