Как эффективно указать вложенные отношения в 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, потому что данные не будут содержать школьную собственность

Другие вопросы по тегам