將我的樹結構加載到Ember中時,我遇到了一些特殊的問題。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認爲/books/1/parts
響應中包含的每個part
都應直接添加到book:parts
屬性中。我怎樣才能同時加載零件樹的所有記錄?
我試着重命名字段,但Ember Data根據型號名稱而不是字段名稱分配記錄。
我擔心在這裏需要重寫一些有創意的適配器。任何想法讚賞。後端完全在我的控制之下,所以我也可以爲此改變事情。
您使用的是RESTAdapter(Ember Data 1.x中的默認值)還是JSONAPIAdapter(Ember Data 2.x中的默認值)? – GJK
@GJK我在Ember 1.13.7上使用RESTAdapter。我應該試試JSONAPIAdapter嗎? – graup
沒有RESTAdapter應該沒問題,它們只是略有不同的功能,所以我想在我回答你的問題之前知道。你想要做的是一個叫做「sideloading」的過程。在工作中我還有一件事要做,但當我完成這件事時,我會爲你寫一個答案。 – GJK