为什么 `hasMany` 关系会为关系中的每个项目创建一个 OPTIONS 和 GET 请求?

Why does a `hasMany` relationship create an OPTIONS and GET request for each item in the relationship?

我的 API 目前有这样的回复:

{
  "data": [{
      "attributes": {
        "customer_name": "The Name",
      },
      "id": 1,
      "relationships": {
        "tasks": {
          "data": [{
              "attributes": {
                "name": "The task",
              },

            ]
          }
        },
        "type": "customer"
      }
    ]
  }

并且 Ember 正确加载模型。但是,当我尝试使用关系创建的计算 属性 时,Ember 为关系中的每个项目启动 OPTIONS 和后续 GET 请求。

我以前没有处理过这类关系,所以这可能是预期的行为,但我有点困惑。

如果它要为每一个都做一个请求,为什么还要费心通过关系将项目作为原始模型的一部分发送呢?为什么不直接进行正常的模型检索,这可能会快得多。

这看起来真的很浪费所以我怀疑我没有正确处理或理解某些事情,我将不胜感激任何见解。

这是您正在做的事情(访问 hasMany 关系)的预期行为。在您的示例中,任务不存在于 Ember Data 的存储中,因此当尝试访问它们时 Ember Data 足够智能,可以从您的 API 中为您获取它们。这样做时,它发出 OPTIONS 和 GET 请求以检索它们。 OPTIONS 请求只是一个 preflight request.

如果您想使用这个特定模型 它的任务(或其他 hasMany 关系模型)而不需要发出那么多网络请求,您可以同时获取两者通过使用 include 请求它们,假设您使用的适配器允许它(即支持 JSON API spec)并且您的 API 也支持:

// for example, fetching a post with its comments (hasMany relationship)
this.store.findRecord('post', params.post_id, { include: 'comments' } );

这样做应该 return 模型及其任务在一个网络请求中。为了进一步阅读,我会查看 Ember 关于 Relationships 的指南。