为什么Ember 3.1在处理Ember Data代理对象时遇到问题?

时间:2018-03-20 18:46:04

标签: ember.js ember-data

我在Ember 3.1中有一个ES6类,它被传递给一个名为certifciate的余烬数据对象。我希望能够在该证书上拨打.reload(),如下所示:

  @action
  showCertificateInfo(this: DomainCard, certificate) {
    this.setProperties({
      isShowingCertificateModal: true,
      selectedCert: certificate,
    })
    certificate
      .reload()
      .then(() => {
        this.set('isShowingCertificateModal', true)
      })
      .catch(e => {
        // TODO: handle this
      })
    }

但是,如果我这样做,那么Ember会给出以下错误/警告:

Assertion Failed: You attempted to access the 'reload' property 
(of <DS.PRomiseObject:ember796>)... However in this case4 the object 
in quetstion is a special kind of Ember object (a proxy). Therefore,
it is still necessary to use` .get(‘reload’)` in this case.

如果我按照代码建议执行操作并改为调用.get('reload'),那么我会收到内部Ember错误,在调用this时未定义this._internalModel。在做的时候我得到了同样的错误:

const reload = certificate.get('reload').bind(certificate)
reload().then()
...

我需要做些什么才能正确重新加载此ember数据对象?

2 个答案:

答案 0 :(得分:1)

实际上,如果基本问题似乎是证书模型与域模型存在异步关系,并且使用{async: false},我们就不再需要将proxyPromise对象返回给我们,并且不再需要将content对象拉出承诺。

答案 1 :(得分:-1)

将内容从代理中拉出来解决了这个问题:

const certContent = certificate.content || certificate
certContent.reload()

我仍然不确定为什么Ember 3.1无法正常使用代理,但这是解决方案。