Ember.js 为什么模型会提出另一个请求?

Ember.js 为什么模型会提出另一个请求?,ember.js,ember-data,Ember.js,Ember Data,我有一条路线: model: function(params) { return this.store.findRecord('singleUser', params.user_id, {reload: true}); }, setupController: function(controller, model) { this._super(controller, model); this.store.find('userNetwork', {userId:

我有一条路线:

  model: function(params) {
    return this.store.findRecord('singleUser', params.user_id, {reload: true});
  },

  setupController: function(controller, model) {
    this._super(controller, model);
    this.store.find('userNetwork', {userId: model.id});
  },
和两种型号:

models/single-user.js

userNetworks: DS.hasMany('userNetwork', {async: true})
models/user-network.js

singleUser: DS.belongsTo('singleUser'),
之后,我的模型向服务器发出请求:

GET "server/api/userNetworks?userId=270".
来自服务器的响应:

{"singleUsers":{"userNetworks":[40]}}
没错,但提出了另一个要求:

GET "server/app_dev.php/api/userNetworks/40".
帮帮我。为什么会这样

余烬v1.13.7
Ember data v1.13.9

您是否假设
this.store.find('userNetwork',{userId:model.id})
应该从您的模型返回
userNetwork
,而无需额外请求,因为您已经获得了模型

您在单个用户上使用的
async:true
userNetworks
有许多关系。这意味着您将指定单独请求相关的userNetworks,这意味着它将发出单独的请求

此外,从您发布的代码来看,您最想做的事情是:

setupController: function(controller, model) {
  this._super(controller, model);
  model.get("userNetworks");
},
这仍然会提出额外的请求,但这是获取相关记录的正确方法

如果您不想让它发出额外的请求,您可以使用
EmbeddedRecordsMixin
并返回每个用户模型的相关
userNetworks

更多关于
EmbeddedRecordsMixin的信息


另外,torazaburo正确地使用了
afterModel
setupController

,因为您正在进行2次store.finds?我会将第二次
find
放在
afterModel
中,而不是
setupController
。这样,您就可以确保在完成转换和呈现模板之前完成加载。