Ember createRecord / RESTAdapater没有嵌套

时间:2016-03-10 01:23:37

标签: rest ember.js ember-data

我试图用Ember和Node创建一条记录。显然,Ember喜欢筑巢你的物体。

如果我给它:

to-report calc-HI [ XX YY ]
  let sizeX count [my-links] of XX
  let sizeY count [my-links] of YY
  let sizeXY count (turtle-set [link-neighbors] of XX [link-neighbors] of YY)
  report (sizeX + sizeY - sizeXY) / sizeY
end

节点在 this.store.createRecord('meal', { name: 'the name', meal_time: 'the time', tolerance: 'ouch' }).save();

中获取此内容
req.body

我宁愿修改余烬而不是节点。

{ meal: { id: 'e5c90c23-1eb1-49e1-a3fa-865944b5eeea', name: 'the name', meal_time: 'the time', tolerance: 'ouch' } } 是否有办法在不嵌套的情况下发送对象?

2 个答案:

答案 0 :(得分:2)

您需要自定义序列化程序。

像这样创建一个应用程序序列化程序:ember g serializer application

然后编辑它以使用基本的RESTSerializer

然后通过覆盖其属性和方法来定制它,以使其产生所需的输出。

自定义的直接方法是normalizeCreateRecordResponse,但这只是表面。

理想情况下,您希望所有类型的操作都具有一致的行为,而不仅仅是createRecord。因此,您需要研究序列化程序的组织方式。阅读official guide to serializers,介绍JSONSerializerRESTSerializer,查看RESTSerializer代码库。

答案 1 :(得分:0)

实现这一目标的最简单方法是覆盖Serializer.serializeIntoHash() http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_serializeIntoHash

serializeIntoHash(hash, type, snapshot, options) {
  Ember.merge(hash, this.serialize(snapshot, options));
}

此代码将从所有传出模型中删除该顶级对象。

您可以在Application Serializer ..或任何特定于型号的序列化程序上覆盖它。