2017-04-21 82 views
0

我有3个模型。带有belongsTo的模型中的计算属性返回undefined

// 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')返回未定义。

Ember检查器显示每个模型的数据。任何想法如何解决这个问题?

+0

似乎你想'人名'fullName',而不是'用户'?不是你的问题,但... –

+0

事实上,这会导致相同的错误。 – Fabic

回答

3

默认情况下,关系是异步的,并返回promises。这意味着您在提问时没有数据。当你第一次询问数据时,它将被加载,并且你需要添加相关键到你的computed property得到更新fullNamePerson模型将被解析。

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') 
}); 
+0

TIL“依赖键”...谢谢 –

+0

谢谢你的作品。 – Fabic