Как эффективно указать вложенные отношения в 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
?
2 ответа
Нет. Вам не нужно предоставлять информацию о вложенных отношениях, если рассматриваемая модель не доступна напрямую из корневого объекта (надеюсь, что это имеет смысл).
Единственное "преимущество" в том, что в вашем случае student
Модель будет загружена, когда school
данные загружаются, а не ожидают, пока classroom
данные загружены. Тем не менее, это обеспечит структуру данных, которая не отражает ваших намерений, и поэтому я бы не стал выступать за это.
Я бы использовал вычисленное свойство или привязку, чтобы получить то, что вы ищете - что-то вроде
school: Ember.computed.alias('classroom.school')
schoolBinding: 'classroom.school'
Это не будет DS.belongsTo, потому что данные не будут содержать школьную собственность