为什么 `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 的指南。
我的 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 的指南。