我有以下模型(针对这个问题进行了简化):
App.Manager = DS.Model.extend({
name: DS.attr('string'),
teamMembers: DS.hasMany('App.Employee')
});
当这个模型被加载(比如说App.Manager.find(1)
)时,它会从我的服务器返回一个 teamMembers 数组:
[10, 11, 12]
我的视图需要来自这些团队成员的数据,因此 Ember 会findMany()
按预期自动通过请求加载它们。我遇到的问题是员工 #11 不存在。findMany()
服务器仅使用员工 10 和 12响应请求:
{
"employees": [
{
"id": 10,
"name": "John Doe"
},
{
"id": 12,
"name": "Jane Doe"
}
}
但是,Ember-Data 似乎仍然为员工 11 保留了一个空的(且已实现的)承诺,即使该员工的数据从未返回。所以现在当我的视图呈现时,我得到一个有 3 行的表(每个员工一个),其中一行是完全空白的(因为记录是空的)。
检查记录的状态:
{
isLoaded: true,
isDirty: false,
isSaving: false,
isDeleted: false,
isError: false,
isNew: false,
isValid: true
}
所以,我不确定如何在不检查我需要的每个属性是否为空的情况下将这个空记录保留在我的视野之外。服务器有没有办法响应告诉 ember 不要履行这个承诺?有没有办法配置 ember 以识别何时不返回数据?
编辑:我意识到,理想情况下,服务器不会为不存在的员工返回 ID。但现实情况是,有时数据不可靠或维护不善。如果员工 11 返回的数据不准确,那么我同意问题出在数据和/或服务上,而不是 Ember。但是,在这种情况下,员工 11 没有返回不准确的数据,它根本没有返回任何数据。在这种情况下,在我看来,ember 至少应该设置一个标志(即 isValid:false),指示记录为空/无效/未找到,如果不是完全销毁对空记录的引用。
编辑 2:这是Github 上的一个问题