2016-07-16 10 views
1

Emberでは関係を適切にロードする方法を考えることができません。ユーザーモデルは、時間の一部を返します。ページをリフレッシュすると、値がnullになる可能性が50/50あるように見えるか、正しく解決されます。Emberが必ずロードされているわけではありません。

私はサーバーオブジェクト(ユーザー関係のbelongsToの終わり)である約束を返していますが、ページをロードする前にユーザーモデルが読み込まれるのを待つようにルートを指示するにはどうすればよいですか?または、最終的にユーザーが読み込まれたときに、ページ上のデータを更新するよう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> 

私は同様の質問ここHow to load belongsTo/hasMany relationships in route with EmberJS

を読んだ。しかし、私は、単一のオブジェクトではなく、私が得る配列を返すよといずれかのソリューションを試すときに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" 
     } 
     } 
    } 
    } 
} 
+0

タイミングが密接に関連したモデルと細心の注意することができます。 APIを管理している場合は、サーバーと一緒にユーザーをサイドロードすることをお勧めします。 – NicholasJohn16

答えて

0

これは、箱から出して動作するはずです!待機部分ではなく自動更新。

チェックアウトthis

しかし、あなたはあなただけafterModelフックでこれを強制することができますモデルを待つようにしたい場合:

afterModel(model) { 
    return get(model, 'user'); 
} 
+0

ええ、私もそうですね、入れ子にされたコンポーネントで結ばれているという事実は、それと関係がありますか? –

+0

本当にありません。あなたがモデルを通過させない場合にのみ。おそらくAPI、シリアライザ、またはアダプタの問題です。 ember-inspectorであなたの状態をチェックアウトしてください。通常の問題は、ember-dataがレコードがすでにロードされていると考えているか、関係が明確でないと考えることです。 – Lux

+0

残念ながら、afterModelフックは機能しません。 inspectを使って、私はユーザモデル '' 'isFulfilled:true''を見ることができますが、' '' content'''はnullです。サーバーはユーザーモデルを返しており、emberは、タイミングが切れたように見えるデータの要求を送信しており、サーバーからデータが戻ったときにemberはそのレコードを更新していません。postmanを使用してエンドポイントを照会するたびに、サーバーは正しく応答します。 –

関連する問題