我有3个模特。
// Product
export default DS.Model.extend({
content: DS.attr('string'),
creator: DS.belongsTo('user')
});
// User
export default DS.Model.extend({
email: DS.attr('string'),
products: DS.hasMany('product'),
person: DS.belongsTo('person'),
fullName: Ember.computed(function() {
return `${this.get('person.firstname')} ${this.get('person.surname')}`;
})
});
// Person
export default DS.Model.extend({
firstname: DS.attr('string'),
surname: DS.attr('string'),
users: DS.hasMany('user')
});
我尝试在把手中使用它。
{{#each products as |product|}}
{{product.creator.fullName}}
{{/each}}
正如您所见,User
模型中存在计算属性。但它始终返回undefined undefined
,因为this.get('person.firstname')
和this.get('person.surname')
返回undefined。
灰烬检查员显示每个模型的数据。知道如何解决这个问题吗?
答案 0 :(得分:5)
默认情况下,关系是异步的,返回promises。这意味着您在提出要求时就没有数据。当您第一次询问数据时,它会被加载,您需要向computed property添加相关密钥,以便在解析fullName
模型时获得更新Person
。
PS。您可以查看ember-promise-helpers
之类的插件来组织模板中的异步数据。
// User
export default DS.Model.extend({
email: DS.attr('string'),
products: DS.hasMany('product'),
person: DS.belongsTo('person'),
fullName: Ember.computed('person.{firstname,surname}', function() {
return `${this.get('person.firstname')} ${this.get('person.surname')}`;
})
});
// Person
export default DS.Model.extend({
firstname: DS.attr('string'),
surname: DS.attr('string'),
users: DS.hasMany('user')
});