如何在ember解析关系之前获取关系值

时间:2014-06-12 12:09:14

标签: ember.js ember-data promise

我有三种模式:

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引用的Model2Model1以及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个对象。

1 个答案:

答案 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:[
   ....
  ]
}