帖子上的JSON有效载荷中不包括Ember多对多ID?

时间:2015-02-03 11:33:06

标签: json ember.js ember-data

我有一个meeting和一个sales-rep模型,关系是ManyToMany。

问题是,当我想创建一个新会议,并将现有salesReps分配给它时(它们已经保存到商店),但是salesReps IDS不包括在由post引起的model.save()动作中{1}}(甚至不是一个空数组),为了使它更清晰,这是我的代码的样子:

meeting.coffee:

Meeting = DS.Model.extend
  client:     DS.belongsTo('client')
  salesReps:  DS.hasMany('sales-rep')
  memo:       DS.attr('string')
  startDate:  DS.attr('date')
  duration:   DS.attr()

sales-rep.coffee:

SalesRep = DS.Model.extend
  meetings:   DS.hasMany('meeting')
  firstName:  DS.attr('string')
  lastName:   DS.attr('string')
  title:      DS.attr('string')
meeting / new.coffee(我在新会议控制器中使用的保存操作):

save: ->
  meeting = @get('model')
  meeting.set('client', @get('client'))
  meeting.get('salesReps').pushObjects(@get('salesReps.content'))
  meeting.save().then =>
    @transitionToRoute 'meetings'

JSON有效负载:( POST http://localhost:4200/api/meetings

meeting: {memo: null, start_date: null, duration: "00:15", client_id: null}
client_id: null
duration: "00:15"
memo: null
start_date: null

无论如何,有效载荷中没有任何salesReps id的痕迹!!

到目前为止我尝试了什么:

  • 仅在会议模型中设置hasMany关系。

  • 在SalesRep和And上设置{async:true},然后设置{async:false} 然后在其中一个

  • 花了将近2天的谷歌搜索和阅读所有相关的帖子在这里 没有运气

任何帮助/提示/建议,非常感谢

1 个答案:

答案 0 :(得分:0)

我会在无休止的阅读和研究之后写出我找到的解决方案,我会写完全详细信息,以及我经历过的试验/失败,因为没有人,没有人能够应该花了3天以上的时间试图解决类似的事情!!

我正在使用Ember-cli,所以,下面有一个文件/目录结构:

首次尝试:

尝试async: true, embedded true的所有组合以及不是app/serializers/的所有组合。

结果,没有运气


第二次尝试:

`import DS from "ember-data"` `import Ember from "ember"` `import config from '../config/environment'` get = Ember.get serializer = DS.RESTSerializer.extend serializeHasMany: (record, json, relationship) -> rel_ids = get(record, relationship.key).map (rel) -> get(rel, 'id') || [] json["#{relationship.key.underscore().singularize()}_ids"] = rel_ids json `export default serializer` 中我添加了以下序列化文件:

meeting.coffee

sales_rep_ids:[]

<强>结果:

添加此序列化程序,我终于能够将salesReps数组发送到控制器了!我可以确认服务器正在根据需要保存协议。

但是,在列出会议时,我无法列出关联的app/serializers/meeting.coffee,所以,我检查了从服务器获取的JSON,这是正确的(包括salesReps ID!)但仍未列出在Ember


第三次尝试:

经过更多的阅读和无尽的头撞击墙,改变一行解决了问题!:

serializer = DS.RESTSerializer.extend中的

serializer = DS.ActiveModelSerializer.extend更改为

{{1}}

而且瞧!保存到后端,并将正确的列表作为ember中的关联列出!

这个解决方案是3 +持续头痛的结果,我在这里发布希望它可能对面临同样问题的人有帮助,我不能声称这是我自己的解决方案,但是,这是阅读许多的结果人们的代码。

我不确定这是否是Ember方式,所以,欢迎任何建议,改进想法和想法。