我有路线:
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
答案 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正好使用afterModel
与setupController
。