为什么 Ember 3.1 无法处理 Ember 数据代理对象?

Why does Ember 3.1 have trouble dealing with Ember Data proxied objects?

我在 Ember 3.1 中有一个 ES6 class,它被传递给一个名为 certifciate 的 ember 数据对象。我希望能够按如下方式对该证书调用 .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 会给出以下结果 error/warning:

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._internalModel 时未定义 this。我在做时遇到同样的错误:

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

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

从代理中提取内容解决了问题:

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

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

实际上,当根本问题似乎是证书模型与域模型之间存在异步关系时,通过使用 {async: false},我们不再需要获取返回给我们的 proxyPromise 对象并删除了需要从承诺中拉出 content 对象。