我有三种模式:
App.Model1 = DS.Model.extend({
ref2: DS.hasMany('model2', {async: true})
});
App.Model2 = DS.Model.extend({
ref3: DS.belongsTo('model3', {async: true})
});
App.Model3 = DS.Model.extend({
someProp: DS.attr('string')
});
问题是我需要在一条路线中获取三个模型,但我只想要什么是必要的。这意味着我需要提取由Model1
引用的Model2
,Model1
以及Model3
引用的Model2
。
Ember-data做得很好,因为它解决了一个XHR请求中的hasMany
关系。问题是我想做这样的事情(例如在beforeModel
中):
return this.store.find('model1', model_id).then(function(data) {
return data.get('ref2').then(function(arrayData) {
var array = [];
arrayData.forEach(function(item) {
array.push(item.get('ref3'));
});
return Ember.RSVP.Promise.all(array);
});
});
但是做这样的事情使得ember-data能够像数组中的项目数一样多地执行xhr请求。如果我可以在解析关系之前获取引用对象的id,那么我将能够在一个请求中获取所有Model3
个对象。
答案 0 :(得分:0)
如果您在后端控制了此项,则更容易解决此服务器端,并在原始响应中返回相关记录。如果您总是以您所在的方式一起请求记录,则尤其如此。此外,您将自己的关系更改为不是异步。
{
model1s:[
{
id:1,
ref2: [1,2]
},
{
id:2,
ref2: [3,4]
}
],
model2s:[
{
id:1,
ref3: [1,2]
},
{
id:2,
ref3: [3,4]
}
.....
],
model3s:[
....
]
}