骨干localStorage和关系

时间:2013-12-05 19:03:22

标签: javascript backbone.js relational-model backbone-local-storage

我有两个RelationalModels,学生和学校。学校有很多学生。所有数据都存储在Backbone.localStorage

我需要建议如何做以下事情:

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

1 个答案:

答案 0 :(得分:2)

我知道您正在使用Backbone.localStorage使用backbone.js完成本地存储。

在我看来,你需要两个集合 - SchoolsCollectionStudentsCollectionSchoolsCollection将实现本地存储上行链路:

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