为什么 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
对象。
我在 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
对象。