Javascript 主干本地存储和关系

Javascript 主干本地存储和关系,javascript,backbone.js,relational-model,backbone-local-storage,Javascript,Backbone.js,Relational Model,Backbone Local Storage,我有两个关系模型,学生和学校。学校有很多学生。所有数据都将存储在Backbone.localStorage中 我需要建议如何做到以下几点: 我想我需要两个系列,每个型号一个,学生和学校 我对如何使用localStorage存储数据感到困惑。每个集合是否应将数据存储在其自己的本地存储中 我知道您正在使用backbone.js实现本地存储 在我看来,您需要两个集合-SchoolsCollection和StudentsCollectionSchoolsCollection将实施本地存储上行链路: v

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

我需要建议如何做到以下几点:

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

我知道您正在使用backbone.js实现本地存储

在我看来,您需要两个集合-
SchoolsCollection
StudentsCollection
SchoolsCollection
将实施本地存储上行链路:

var SchoolsCollection = Backbone.Collection.extend({

  localStorage: new Backbone.LocalStorage("schools")

});
SchoolsCollection
中,您将保存类型为
schoolsmodel
的模型。
SchoolModel
的实例将带有名为
students
的属性,即
studentscolection
的实例

这将导致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
在序列化时释放其类型。您必须在
SchoolModel
中实现
parse()

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

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

如果我没有在StudentsCollection中指定localStorage属性,我将得到“错误:必须指定“url”属性或函数”。另外,我真的不明白StudentModel是如何以这种方式存储的。。。如果我想获取一个视图中所有学生的集合,是否必须循环使用Schools Students属性?@user1121487小心不要在嵌套集合上使用
create()
之类的方法-这可能是上述错误的原因。使用不进行不必要同步的方法,如
add()
。要访问您的模型,您可以对第一所学校/第一名学生尝试此操作:
schools.at(0).get('students')。at(0)
我最近遇到了相同的问题,并且很长一段时间都阻止了我。我认为parse()方法应该是关键点。但对主干还不太熟悉,那么如何做到这一点呢?你能给我更多的提示吗?