提问者:小点点

模型中的计算属性,带有属性返回未定义


我有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检查器显示每个模型的数据。知道如何解决这个问题吗?


共1个答案

匿名用户

默认情况下,关系是异步的,并返回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')
});