Ember でリレーションシップを適切に読み込む方法を試していないようです。ユーザー モデルは、一部の時間だけを返します。ページを更新すると、50/50 の確率で値が null になるか、正しく解決されるようです。
サーバーオブジェクト(ユーザー関係のbelongsToエンド)であるpromiseを返すルートで理解していますが、ページをロードする前にユーザーモデルがロードされるのを待つようにルートに指示するにはどうすればよいですか、またはどのようにすればよいですか最終的にユーザーをロードしたときに、ページのデータを更新するよう ember に指示しますか?
afterModel フックで RSVP をいじってみましたが、うまくいきませんでした。これには明らかな解決策が必要ですか?
ルート
model(param) {
return this.store.findRecord('server', param.server_id);
},
サーバーモデル
export default Model.extend(Validations, {
user: belongsTo('user'),
});
ユーザーモデル
export default Model.extend({
displayName: attr('string'),
servers: hasMany('server'),
});
成分
export default Ember.Component.extend({});
コンポーネント テンプレート
<div class="user-panel">
<ul class="user-details">
<li>owner:{{model.user.displayName}}</li>
</ul>
</div>
私はここで同様の質問を読みました
しかし、配列ではなく単一のオブジェクトのみを返すためArray Methods must be provided an Array
、ソリューションを試すとスローされます
サーバーの応答
{
"data": {
"type": "server",
"id": "578aba694b08ce2310f36798",
"attributes": {
//removed
},
"relationships": {
"jobs": {
"data": [
{
"type": "jobs",
"id": "578aba694b08ce2310f3679a"
}
]
},
"user": {
"data": {
"type": "user",
"id": "57760677d04e0f11f4d3f7e5"
}
}
}
}
}