Ember数据嵌套资源树结构

时间:2015-10-12 12:44:38

标签: ember.js ember-data

将树形结构加载到Ember时,我有一个奇怪的问题。

我的模特是:

book.js
  - parts: DS.hasMany('part', {inverse: 'book', async: true})

part.js
  - subparts: DS.hasMany('part', {inverse: 'parent_part', async: true}),

使用以下API响应:

GET /api/books:
{
  books: [
    {id: 1, links: {parts: "/api/books/1/parts"}},
    ...
  ]
}

GET /api/books/1/parts:
{
  parts: [
  {
    id: 1,
    subparts: [10, 11]
  },
  {
    id: 2,
    subparts: []
  }
  ]
}

问题出在部分的树性质上:这本书只有直接后代id 1和2,但这些都有自己的子部分。 结构有效,但会导致/books/1/parts结果中未包含的每个部分的多个子查询。我想避免这些查询,不仅是因为性能原因,还因为我需要额外的查询参数,这些参数会在此步骤中丢失...我知道coalesceFindRequests但它引入了新问题。

要重新解决问题,Ember Data会认为part响应中包含的每个/books/1/parts都应直接添加到book:parts属性中。我怎样才能同时加载零件树的所有记录?

我尝试重命名字段,但Ember Data根据型号名称而不是字段名称分配记录。

我担心这里需要一些创意适配器覆盖。任何想法都赞赏。后端完全在我的控制之下,所以我也可以改变目的。

1 个答案:

答案 0 :(得分:0)

你需要使用一个名为sideloading的进程,按预期工作(我过去曾遇到过侧载数据问题)。如this issue中所述,您希望将零件拆分为两个独立的阵列。

{
    // These are the direct children
    "parts": [{...}, {...}],
    // These are the extra records
    "_parts": [{...}, {...}]
}