为什么模型会做另一个请求?

时间:2015-11-18 10:00:01

标签: 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.id});
  },

两种模式:

模型/单user.js的

userNetworks: DS.hasMany('userNetwork', {async: true})

模型/用户network.js

singleUser: DS.belongsTo('singleUser'),

之后我的模型向服务器发出请求:

GET "server/api/userNetworks?userId=270".

来自服务器的响应:

{"singleUsers":{"userNetworks":[40]}}

是对的,但另外提出了一个请求:

GET "server/app_dev.php/api/userNetworks/40".

帮帮我。为什么会这样?

Ember v1.13.7 Ember-data v1.13.9

1 个答案:

答案 0 :(得分:0)

您是否认为this.store.find('userNetwork', {userId: model.id});应该从您的模型返回userNetwork而没有其他请求,因为您已经获得了该模型?

您与async: true的单用户hasMany关系使用userNetworks。这意味着您要指定您将单独请求相关的userNetworks,这意味着它将发出单独的请求。

此外,从您发布的代码看起来您​​很可能想要这样做:

setupController: function(controller, model) {
  this._super(controller, model);
  model.get("userNetworks");
},

仍会提出额外请求,但这是获取相关记录的正确方法。

如果您不希望它发出其他请求,您可以使用EmbeddedRecordsMixin并为每个用户模型返回相关的userNetworks

有关EmbeddedRecordsMixin here

的更多信息

P.S。 @torazaburo正好使用afterModelsetupController