Javascript 当请求的ID不存在时,如何避免空记录';不存在?(余烬)

Javascript 当请求的ID不存在时,如何避免空记录';不存在?(余烬),javascript,model-view-controller,ember.js,ember-data,Javascript,Model View Controller,Ember.js,Ember Data,我得到了以下模型(针对这个问题进行了简化): 当加载此模型时(例如使用App.Manager.find(1)),它将从我的服务器返回一个teamMembers数组: [10, 11, 12] 我的视图需要来自这些团队成员的数据,因此,正如预期的那样,Ember会自动使用findMany()请求加载它们。我遇到的问题是,11号员工根本不存在。服务器只对员工10和12响应findMany()请求: { "employees": [ { "id": 10, "

我得到了以下模型(针对这个问题进行了简化):

当加载此模型时(例如使用
App.Manager.find(1)
),它将从我的服务器返回一个teamMembers数组:

[10, 11, 12]
我的视图需要来自这些团队成员的数据,因此,正如预期的那样,Ember会自动使用
findMany()
请求加载它们。我遇到的问题是,11号员工根本不存在。服务器只对员工10和12响应
findMany()
请求:

{
  "employees": [
    {
      "id":   10,
      "name": "John Doe"
    },

    {
      "id":   12,
      "name": "Jane Doe"
    }
}
但是,尽管员工11的数据从未返回,但余烬数据似乎仍然保留着对该员工11的一个空洞(且已兑现)的承诺。所以现在当我的视图呈现时,我得到一个包含3行的表(每个员工一行),其中一行是完全空白的(因为记录是空的)

检查记录的状态:

{
    isLoaded:  true,
    isDirty:   false,
    isSaving:  false,
    isDeleted: false,
    isError:   false,
    isNew:     false,
    isValid:   true
}
因此,我不知道如何在不检查我需要的每个属性是否都是空的情况下将这个空记录保留在我的视图之外。有没有一种方式让服务器响应,告诉余烬不要履行这个承诺?是否有一种方法可以配置ember以识别何时未返回数据


编辑:我意识到,理想情况下,服务器不会为不存在的员工返回ID。但现实是,有时数据不可靠,或者维护不善。如果11号员工返回时数据不准确,那么我同意问题在于数据和/或服务,而不是余烬。然而,在这种情况下,employee 11并没有返回不准确的数据,它根本没有返回任何数据。在这种情况下,在我看来,ember至少应该设置一个标志(即isValid:false),指示记录是空的/无效的/找不到的,如果不是完全销毁对空记录的引用的话


编辑2:这里有一个

很难说余烬数据是否应该为这个场景提供一些魔力。通过在关系中包含ID,您已经有效地告诉了余烬数据它的存在

REST适配器(从服务器请求数据)与序列化程序(将响应数据转换为模型)是分开的,因此很难知道是否所有请求的数据都已返回。如果您不介意将适配器与序列化程序紧密耦合,则可以验证服务器是否提供了您所期望的一切

解决方法:

将验证属性添加到员工模型中,以用作一种伪状态。这应该默认为false或null,并且API返回的每个记录都必须覆盖它。相当老练。幸运的是,同样的概念可以通过使用现有属性(如员工姓名)来实现

if(App.Employee.find(11.get('name')!=null){dance('thriller');}


如果您将上述概念视为标准验证要求,您可以选择在模型或序列化程序中实现它。

这不是后端的问题,而不是烬本身?当然,在理想世界中,余烬将排除未返回的实体。当11不存在时,为什么您的后端要发回
[10,11,12]
?当然,您的后端不应该包括11,除非后端正在进行一些缓存。@Wildhoney您是对的。最终,服务器不应该一开始就发送11。我还没有弄明白为什么它会发回一个不存在的id,但我觉得ember应该足够聪明,能够优雅地处理这个问题。似乎rest适配器应该能够分辨,因为它知道它请求了哪些记录,并且在序列化程序完成后,适配器知道我们现在有哪些记录。还有,当余烬数据解析关系时,它真正做的只是一个自动的
findMany([id,id,id])
。如果使用无效ID手动执行相同的
findMany()
调用,您也会遇到同样的问题。也许应该有一种方法让服务器在返回有效结果的同时指出问题<代码>{“员工”:[{“id”:10,“姓名”:“Jon Doe”},{“id”:11,“iError”:true},{“id”:12,“姓名”:“Jane Doe”}。只是随便说说,我不知道。。。
{
    isLoaded:  true,
    isDirty:   false,
    isSaving:  false,
    isDeleted: false,
    isError:   false,
    isNew:     false,
    isValid:   true
}