从 Ember 模型计算的承诺中解析字符串



我在EmberJS模型上有一个计算属性:

imageUrl: computed('image', function () {
let promise = new RSVP.Promise(function (resolve, reject) {
resolve('image.png');
});
//
return DS.PromiseObject.create({promise: promise});
}),

这有效,但是模型将承诺解析为对象,因此我必须执行以下操作:

resolve({image: 'image.png'});

要实际访问模板中的值,请使用以下内容:

{{result.imageUrl.image}}

而不仅仅是:

{{result.imageUrl}}

显然,问题似乎与DS.PromiseObject有关,但我不知道该用什么代替,文档在这方面不是很有帮助。

DS.PromiseObject 将结果代理到其内容字段。如果只传入一个字符串,则可以使用{{result.imageUrl.content}}检索它。但是,如果返回对象,则对{{result.imageUrl.image}}的调用将使用代理,以便在get图像时,它将映射到content.image

就个人而言,我更喜欢使用ember-concurrency来满足我的异步需求:

import { readOnly } from '@ember/object/computed';
import { task } from 'ember-concurrency';
fetchImage: task(function* () {
return yield 'image.url';
}),
imageUrl: readOnly('fetchImage.lastSuccessful.value')

请参阅 ember 并发插件的文档,看看它是否适合您的需求。

相关内容

最新更新