无法调用保存在余烬数据关系上

时间:2018-04-17 11:03:42

标签: ember.js ember-data

我想处理组件/表单中的关系。它在我创建关系时工作正常,但在我尝试更新

时失败
import Ember from 'ember';

export default Ember.Component.extend({
  store: Ember.inject.service(),
  init(){
    this._super(...arguments);
    var adresseField=this.get('adresseAttributeField');
    var parent=this.get('parent');
    if (parent.get(adresseField).content==null) {
      this.set('adresse',this.get('store').createRecord('adresse'));
    }else{
      this.set('adresse',parent.get(adresseField));
    }
  },
  actions:{
    saveAdresse(adresse){
      console.log(adresse);
      var parent=this.get('parent');
      var adresseField=this.get('adresseAttributeField');
      adresse.save().then(()=>{
        if(parent.get(adresseField)!=adresse){
          parent.set(adresseField,adresse)
          parent.save()
        }
      }),()=>{
      }
    }
  }
});

触发saveAdresse并更新地址时会出现错误消息:

adresse.save is not a function

创建地理位置时,该组件可以正常工作。

我认为当我检索现有关系时,我的问题出在init中:

this.set('adresse',parent.get(adresseField));

然而,我无法确定究竟是什么问题。

2 个答案:

答案 0 :(得分:1)

这里的问题可能是adresseField是异步关系。对于这种关系,Ember Data将返回所谓的promise代理对象。这样,一旦该关系结算,Ember就可以访问这些属性。但是,方法不代理,因此它告诉您adresseField没有方法。

您需要在.then块中访问已解决的关系:

parent.get(adresseField).then(result => {
  this.set("adresse", result);
});

答案 1 :(得分:0)

问题可能在于它是异步关系。您可以通过在promise上调用.then并在那里设置属性来解决此问题,但这可能会导致异步副作用。实际上,当您在组件中时,您需要所有可用的数据,而无需进行异步调用。

如果可能的话,最好在路由级别加载该数据,以便您知道此时可用。