私は次のモデルを持っています(この質問のために簡略化されています):
App.Manager = DS.Model.extend({
name: DS.attr('string'),
teamMembers: DS.hasMany('App.Employee')
});
このモデルがロードされると(たとえば、でApp.Manager.find(1)
)、teamMembers配列を使用してサーバーから返されます。
[10, 11, 12]
私のビューにはこれらのチームメンバーからのデータが必要なので、EmberfindMany()
は期待どおりに自動的にリクエストをロードします。私が遭遇している問題は、従業員#11が存在しないことです。findMany()
サーバーは、従業員10と12だけで要求に応答します。
{
"employees": [
{
"id": 10,
"name": "John Doe"
},
{
"id": 12,
"name": "Jane Doe"
}
}
しかし、Ember-Dataは、従業員11のデータが返されなかったとしても、従業員11の空の(そして履行された)約束を維持しているようです。したがって、ビューがレンダリングされると、3行(各従業員に1つ)のテーブルが表示され、それらの行の1つは完全に空白になります(レコードが空であるため)。
レコードの状態を確認します。
{
isLoaded: true,
isDirty: false,
isSaving: false,
isDeleted: false,
isError: false,
isNew: false,
isValid: true
}
したがって、必要なすべてのプロパティが空であるかどうかを確認せずに、この空のレコードをビューから除外する方法がわかりません。サーバーが応答して、残り火にこの約束を果たさないように指示する方法はありますか?データが返されない場合を認識するようにemberを構成する方法はありますか?
編集:理想的には、サーバーは存在しない従業員のIDを返さないことを理解しています。しかし、実際には、データの信頼性が低い場合や、保守が不十分な場合があります。従業員11が不正確なデータで戻ってきた場合、問題はデータやサービスにあり、Emberにはないことに同意します。ただし、この場合、従業員11は不正確なデータを返しておらず、データをまったく返していません。この場合、残り火は少なくとも、レコードが空/無効/見つからないことを示すフラグ(つまり、isValid:false)を設定する必要があるように思われます。フラットにしない場合は、空のレコードへの参照を完全に破棄します。
編集2:これがGithubの問題です