如果嵌套關聯存在,Sails.js 0.10.4
將返回不一致的JSON結果。這會導致各種令人頭疼的嵌套關聯和Ember數據。讓這兩個人一起工作的首選方式是什麼?Sails.js和Ember.js嵌套關聯
我的堆棧是:
- Sails.js
0.10.4
- 灰燼CLI
0.0.42
- 灰燼
1.7.0
- 灰燼數據
~1.0.0-beta.7
- 燼數據帆適配器:
~2.0.0
我曾希望使用帆適配器,以便我可以在以後轉換爲websockets。我應該放棄這一點,並使用sails-ember-blueprints,直到Sails協會更成熟一些?
這裏是我試過,假設三個相關的模型例如user [hasMany]>> comment [belongsTo]>> commentType
選項1
- 在
sails/config/blueprints.js
設置populate: true
。 - 灰燼中使用自定義序列,其使用EmbeddedRecordsMixin
串行器可能看起來像:
// client/app/serializers/user.js
import DS from 'ember-data';
export default DS.JsonSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
comments: {
embedded: 'always'
}
}
}
這對於聯想的一個水平,例如工作正常A --> B
,但帆目前不填充嵌套的嵌入式關聯,因此對於A --> B --> C
你會得到這樣一個結果:
// query the sails API /api/v1/users/1
{
id: 1,
name: 'User1',
comments: [{
id: 1,
name: 'Comment1',
commentType: 1 // id instead of embedded record
}]
}
選項1第2部分
在灰燼模型設置comment.commentType
屬性爲{async: true}
呢由於服務器響應不一致而無法工作。訪問/api/v1/users/1
將得到上面的迴應,只有commentType ID
(這是與異步罰款),而直接訪問評論會給你和嵌入commentType
記錄,例如,
// query the sails API /api/v1/comments/1
{
id: 1,
name: 'Comment1',
commentType: {
id: 1,
name: 'C'
}
}
灰燼不喜歡這個:)
選項2
- 保持協會評爲正常帆和改變從
DS.belongsTo
Ember的屬性DS.attr('number')
- 恩貝爾則可以使用
setupController
掛鉤執行單獨的查詢來提取評論數據
這種作品適用於一對一的關係,但並不完全適用於hasMany
關係。
選項3
- 在
sails/config/blueprints.js
設置populate: false
。 - 將所有灰燼的關係,以
async:true
帆出現,如果populate:false
設置爲完全離開了屬性。這是預期的行爲?
// query Sails API /api/v1/users/1
{
id: 1,
name: "A",
// no mention of comments??
}
以下是未定義因此並導致灰燼錯誤:
myUser.get('comments');
選項4
- 改寫默認
find
藍圖來處理嵌套的關聯。 (See this SO answer)
似乎有點像重塑Sails ...太多了給出的例子是針對單個帖子,但是這需要處理填充多個記錄。由於缺少Sails中的model.Populate
方法,這很快進入異步地獄。
http://sanestack.com/也許對你也有興趣。它會自動爲您實施藍圖,並設置整個後端和前端。 – Markus 2015-01-11 00:55:33