Ember模型访问belongsTo属性返回null

时间:2018-04-05 16:24:04

标签: ember.js ember-model

我有一个具有此属性的模型Person:address_fk: DS.belongsTo('address')引用地址模型。

在地址模型中,有几个属性,如zip_code,building ...

我的目标是在Person中创建一个计算属性,通过访问this.get('address_fk.zip_code')显示完整地址,但它返回 undefined

我肯定在这里遗漏了一些东西,但我真的不知道是什么。

更新:问题解决了,方法如下:

adresse: computed('adresse_fk', function() {
return DS.PromiseObject.create({
  promise: this.get('adresse_fk').then((adresse) => {
    return adresse.get('escalier_etage_appartement') + ' ' + adresse.get('batiment') + ' ' + adresse.get('numero_nom_voie') + ' ' + adresse.get('code_postal') + ' ' + adresse.get('commune_fk.nom')
  })
});

}),

2 个答案:

答案 0 :(得分:1)

您正在Person模型上定义计算属性。 computed属性可以返回地址的PromiseObject。你可以尝试这两件事 -

1检查是否存在adresse_fk

// Person model
adresse: Ember.computed('adresse_fk', function() {
if this.get('adresse_fk'){
  return this.get('adresse_fk.escalier_etage_appartement') + ' ' 
   + this.get('adresse_fk.batiment') + ' ' + 
   this.get('adresse_fk.numero_nom_voie')
}

2使用then解决承诺

// Person model
adresse: Ember.computed('adresse_fk', function() {
this.get('adresse_fk').then( function(address){
  return address.get('escalier_etage_appartement') + ' ' 
   + address.get('batiment') + ' ' + 
   address.get('numero_nom_voie')
 }
}

我没有对它们进行过测试,但它们应该有效。

答案 1 :(得分:0)

//Address
export default DS.Model.extend({
    point_de_consommation_fk: DS.hasMany('pointdeconsommation'),
    code_postal: DS.attr('string'),
    escalier_etage_appartement: DS.attr('string'),
    batiment: DS.attr('string'),
    numero_nom_voie: DS.attr('string'),
    commune_fk: DS.belongsTo('commune'),
    personne_set: DS.hasMany('personne')
})

// Person model
export default DS.Model.extend({
     categorie_code: DS.attr('personne-categorie-code'),
     email: DS.attr('string'),
     adresse_fk: DS.belongsTo('address'),
     telephone1: DS.attr('string'),
     telephone2: DS.attr('string', {defaultValue: ''}),
     adresse: computed('adresse_fk', function() {
       return this.get('adresse_fk.escalier_etage_appartement') + ' ' 
       + this.get('adresse_fk.batiment') + ' ' + 
       this.get('adresse_fk.numero_nom_voie')
     }),
})

我也忘了说有时我的 undefined 值正在显示    起来。也许我需要在调用该属性之前等待我的模板?