2014-08-30 125 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