サービスを使用してデータを要求すると、そのサービスがコンポーネントに挿入されます。データは Ember Mirage から取得されます。
私の問題は、このプロパティがcomputedPropertyで使用されている場合でも、データをプロパティとして表示できないことです。computedPropertyは正しく計算して表示します。
エンブレムのコンポーネント テンプレート:
.notifications-number {{notificationService.countUnread.content}}
each notificationService.notifications.content as |notification|
span {{notification.text}}
通知サービス:
import Ember from 'ember';
export default Ember.Service.extend({
store: Ember.inject.service('store'),
// render bugs out
notifications: function() {
return this.get('store').findAll('notification')
}.property(),
// renders correctly
countUnread: function() {
return DS.PromiseObject.create({
promise: this.get('notifications').then((notifications) => {
return notifications.get('length')
})
});
}.property(),
});
ミラージュ構成:
this.get('/notifications', () => {
return {
data: [
{id: 1, type: 'notification', text: 'hi im notification', link: ''},
{id: 2, type: 'notification', text: 'hi im notification 2', link: 'google.com'}
]
};
});
取得したデータが配列ではなくオブジェクトである別のサービスとコンポーネントでも同様の問題があります。
{{myService.myProperty}}
レンダリング<(subclass of Ember.ObjectProxy):ember404>
{{myService.myProperty.content}}
レンダリング<my-app@model:myModel::ember580:1>
{{myService.myProperty.content.myModelField}}
何もレンダリングしません。
アプリの初期化時にストアに手動で値を設定するとすべて正常に機能しましたが、実際の非同期リクエストが API モックに送信されると機能しません。