Доступ модели Ember к свойству ownTo возвращает значение null

У меня есть модель Person с этим свойством: address_fk: DS.belongsTo('address'), относящаяся к модели 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')
  })
});

}),


person El Poisen    schedule 05.04.2018    source источник
comment
Вы уверены, что соответствующая запись выполнена и сервер вернул для нее некоторый контент? Имейте в виду, что отношения могут быть асинхронными и что отношения являются PromiseObject.   -  person jelhan    schedule 06.04.2018
comment
Мне нужно было бы увидеть определение отношения (как для модели адреса, так и для модели человека), а также нормализованную полезную нагрузку, которая передается в магазин. С этим я могу легко вам помочь :) Если вы не знаете, где увидеть нормализованную полезную нагрузку, в точке останова сериализатора или переопределите normalizeResponse для регистрации возвращаемого значения.   -  person runspired    schedule 06.04.2018
comment
Привет, Джелхан, я обновил свой вопрос ниже. Иногда появляется мое значение, поэтому я немного смущен.   -  person El Poisen    schedule 06.04.2018
comment
Привет, Runspired, я добавил две модели ниже. Что касается точки останова сериализатора, я не вижу, что делать.   -  person El Poisen    schedule 06.04.2018


Ответы (2)


вы определяете вычисляемое свойство в модели Person. Вычисляемое свойство может возвращать 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')
 }
}

Я не проверял их, но они должны работать.

person vikasnautiyal    schedule 08.04.2018
comment
Привет, действительно идея обещания была правильным выбором! Я использовал DS.PromiseObject.create Большое спасибо! - person El Poisen; 08.04.2018

//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. Может быть, мне нужно подождать с моим шаблоном, прежде чем вызывать свойство?

person El Poisen    schedule 06.04.2018