我有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
模型中有一个计算属性。但它总是返回未定义的未定义
,因为this. get('人.firstname')
和this.get('人.surname')
返回未定义。
Ember检查器显示每个模型的数据。知道如何解决这个问题吗?
默认情况下,关系是异步的,并返回promise。这意味着当您询问数据时,您没有数据。当您第一次询问数据时,它将被加载,您需要向您的计算属性添加依赖键,以便在Person
模型解析时更新fullName
。
PS您可以查看像enber-prosion-help ers
这样的插件来组织模板中的异步数据。
// 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')
});