如何有效地指定 ember-data 中的嵌套关系?
How to efficiently specify nested relationships in ember-data?
我有一个这样的嵌套模型:
var School = DS.Model.extend({
classrooms: DS.hasMany('classroom', {async: true})
});
var Classroom = DS.Model.extend({
students: DS.hasMany('student', {async: true}),
school: DS.belongsTo('school', {async: true})
});
var Student = DS.Model.extend({
name: DS.attr('string'),
classroom: DS.belongsTo('classroom', {async: true})
});
我使用 firebase 作为后端,我知道为了效率起见,建议对模式进行非规范化。明确指定关系有什么用吗
var Student = DS.Model.extend({
school: DS.belongsTo('school', {async: true});
});
对于 Student
模型,即使每个 Student
属于一个 Classroom
并且每个 Classroom
属于一个 School
?
我会使用计算 属性 或绑定来获取您想要的东西 - 类似于
school: Ember.computed.alias('classroom.school')
schoolBinding: 'classroom.school'
它不会是 DS.belongsTo 因为数据实际上不会包含学校 属性
没有。您不需要提供嵌套关系信息,除非有问题的模型可以直接从根对象访问(希望有意义)。
这样做的唯一 "benefit" 是,在您的情况下,student
模型将在加载 school
数据时加载,而不是等到 classroom
数据被加载。但是,这将提供一个无法反映您的意图的数据结构,因此我不提倡这样做。
我有一个这样的嵌套模型:
var School = DS.Model.extend({
classrooms: DS.hasMany('classroom', {async: true})
});
var Classroom = DS.Model.extend({
students: DS.hasMany('student', {async: true}),
school: DS.belongsTo('school', {async: true})
});
var Student = DS.Model.extend({
name: DS.attr('string'),
classroom: DS.belongsTo('classroom', {async: true})
});
我使用 firebase 作为后端,我知道为了效率起见,建议对模式进行非规范化。明确指定关系有什么用吗
var Student = DS.Model.extend({
school: DS.belongsTo('school', {async: true});
});
对于 Student
模型,即使每个 Student
属于一个 Classroom
并且每个 Classroom
属于一个 School
?
我会使用计算 属性 或绑定来获取您想要的东西 - 类似于
school: Ember.computed.alias('classroom.school')
schoolBinding: 'classroom.school'
它不会是 DS.belongsTo 因为数据实际上不会包含学校 属性
没有。您不需要提供嵌套关系信息,除非有问题的模型可以直接从根对象访问(希望有意义)。
这样做的唯一 "benefit" 是,在您的情况下,student
模型将在加载 school
数据时加载,而不是等到 classroom
数据被加载。但是,这将提供一个无法反映您的意图的数据结构,因此我不提倡这样做。