具有belongsTo的模型中的计算属性返回undefined

时间:2017-04-21 14:50:21

标签: javascript ember.js handlebars.js

我有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。

灰烬检查员显示每个模型的数据。知道如何解决这个问题吗?

1 个答案:

答案 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')
});