2016-03-10 45 views
1

我试图用Ember和Node创建一个记录。显然,Ember喜欢嵌套你的物体。Ember createRecord/RESTAdapater没有嵌套

如果我给它:

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' } 
} 

我宁愿修改余烬侧比节点侧。

有没有办法让createRecord发送对象而不嵌套它?

+0

多数民众赞成在多余的作品!它试图考虑使用REST资源来保存模型。另外从REST Api的角度来看,这是正确的。 – AnujKu

回答

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)); 
} 

这个代码将所有传出的模型删除顶层对象。

您可以在您的应用程序序列化器或任何您可能具有的模型特定的序列化器上覆盖它。

2

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

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

然后编辑它以使用基本RESTSerializer

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

即时定制方法是normalizeCreateRecordResponse,但这只是表面。

理想情况下,您希望各种操作的一致行为,而不仅仅是createRecord。因此,您需要研究串行器的组织方式。阅读official guide to serializers,引导至JSONSerializerRESTSerializer,查看RESTSerializer代码库。