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

时间:2018-06-05 11:28:27

标签: ember.js promise ember-data

我在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有关,但我不知道该使用什么,而且文档在这方面不是很有帮助。

1 个答案:

答案 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插件的文档,了解它是否适​​合您的需求。