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
。这样,您就可以确保在完成转换和呈现模板之前完成加载。