2014-08-30 115 views
0

如果嵌套關聯存在,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

似乎有點像重塑Sails ...太多了給出的例子是針對單個帖子,但是這需要處理填充多個記錄。由於缺少Sails中的model.Populate方法,這很快進入異步地獄。

回答

0

我不得不放棄燼adapter適配器,而是使用Sails blueprints代替。通過在Sails藍圖上將Ember模型async設置爲falseperformSideloadtrue,我可以使用無風扇發送的sideloaded數據。

+1

http://sanestack.com/也許對你也有興趣。它會自動爲您實施藍圖,並設置整個後端和前端。 – Markus 2015-01-11 00:55:33