我在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
有关,但我不知道该使用什么,而且文档在这方面不是很有帮助。
答案 0 :(得分:4)
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-concurrency插件的文档,了解它是否适合您的需求。