我目前的API响应如下:
{
"data": [{
"attributes": {
"customer_name": "The Name",
},
"id": 1,
"relationships": {
"tasks": {
"data": [{
"attributes": {
"name": "The task",
},
]
}
},
"type": "customer"
}
]
}
Ember正确加载了模型。但是,当我尝试使用关系创建的计算属性时,Ember对关系中的每个项目都发起OPTIONS
和随后的GET
请求。
我以前没有处理过这类关系,所以这可能是预期的行为,但我有些困惑。
如果要为每个请求发送一个请求,为什么不介意通过某种关系将这些项作为原始模型的一部分发送呢?为什么不做一个普通的模型检索,它可能会更快。
这似乎真的很浪费,所以我怀疑我没有正确处理或理解某些东西,我将不胜感激。
答案 0 :(得分:3)
对于您正在做的事情(访问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' } );
这样做应该在一个网络请求中返回模型及其任务。为了进一步阅读,我将在Relationships上查看Ember的指南。