ember.js - 为什么“hasMany”关系会为关系中的每个项目创建一个 OPTIONS 和 GET 请求?
问题描述
我目前从我的 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 请求只是一个预检请求。
如果您想在不发出如此多网络请求的情况下使用此特定模型及其任务(或其他关系模型),您可以通过假设您正在使用允许它的适配器(即支持JSON API 规范),您的 API 也可以:hasMany
include
// for example, fetching a post with its comments (hasMany relationship)
this.store.findRecord('post', params.post_id, { include: 'comments' } );
这样做应该在一个网络请求中返回模型及其任务。如需进一步阅读,我会查看 Ember 的关系指南。
推荐阅读
- python - 计算具有给定边界的数学公式的值范围
- llvm - 如何将控制流图转换回其源代码?例如,C/C++
- python - 在 django 项目中使用 manage.py shell 是否合理?我正在创建一个博客应用程序
- javascript - 如何创建多个动态下拉列表,从同一个数组中获取值,而无需更改 Javascript 中的其他值
- flutter - Flutter - FAILURE:构建失败并出现异常
- php - WC()->cart->add_to_cart 问题在这里?
- swift - SwiftUI 限制更改 TabView 视图的拖动手势
- eloquent - 雄辩:如何处理条件关系
- reactjs - 连接商店和本地 IProps
- javascript - React js-点击链接后如何防止页面重新加载。现在整个页面都在点击链接刷新