1 回答

TA貢獻1831條經(jīng)驗 獲得超9個贊
在這里,您從您的計算屬性返回一個承諾,它是一個對象,而不是一個字符串。
通常,在渲染您的組件之前,我們實際上不會等待 promise 解決。相反,我們先渲染一些東西(比如加載 gif),然后在 promise 解決后重新渲染圖像。
這個問題有兩種傳統(tǒng)的解決方案。一種是在您的計算屬性中使用 PromiseProxy。
return Ember.ObjectProxy.extend(Ember.PromiseProxyMixin).create({ promise });
您可以在模板中使用這樣的代碼:
{{#if image.baseUrl.isPending}}
<img src="loading.gif">
{{else}}
{{lazy-image url=(concat image.baseUrl.content) ...}}
{{/if}}
見https://api.emberjs.com/ember/release/classes/PromiseProxyMixin
第二種傳統(tǒng)解決方案是使用ember-concurrency和避免返回承諾的計算屬性。這涉及重寫您的代碼以使其更具必要性。
請參閱http://ember-concurrency.com/docs/introduction/
我通常更喜歡這種解決方案,因為使用 Promise 代理會變得復雜且難以理解。
此外,如果您使用的是更現(xiàn)代的 Ember 版本(2.10 或更高版本),您可以嘗試ember-lifeline添加到項目中的代碼量比添加到項目中的代碼要少得多ember-concurrency,以及更簡單的 API 足以滿足此需求。(我根據(jù)您的代碼示例假設您使用的是舊版本的 Ember,但使用的是現(xiàn)代瀏覽器。)請參閱https://ember-lifeline.github.io/ember-lifeline/
添加回答
舉報