Ember.js 保存新记录时清空请求有效负载-余烬数据 我正在尝试的是:
保留一个新记录,但由于某些原因,即使该记录有数据,请求负载也是空的 这是一把小提琴: (忽略firebase,它就在那里,这样我们可以在保存时检查请求负载。) 说明: 您将注意到,当您保存记录时,请求负载为空 理想情况下,请求有效负载如下所示:Ember.js 保存新记录时清空请求有效负载-余烬数据 我正在尝试的是:,ember.js,ember-data,Ember.js,Ember Data,保留一个新记录,但由于某些原因,即使该记录有数据,请求负载也是空的 这是一把小提琴: (忽略firebase,它就在那里,这样我们可以在保存时检查请求负载。) 说明: 您将注意到,当您保存记录时,请求负载为空 理想情况下,请求有效负载如下所示: { "inventory": { "entry_time": "2014-02-05", "client_id": 1, "user_id": 1, "product_stock_l
{
"inventory": {
"entry_time": "2014-02-05",
"client_id": 1,
"user_id": 1,
"product_stock_levels": [
{
"product_id": 1,
"quantity": 2
},
{
"product_id": 2,
"quantity": 0
},
{
"product_id": 3,
"quantity": 8
}
]
}
}
App.InventorySerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
productStockLevels: {embedded: 'always'}
}
});
笔记:
这似乎只是一个问题,当它是一个新的记录。更新现有记录将发送正确的有效负载。您希望余烬数据在另存为默认值时将关系嵌入模型中。这不是默认行为 您可以将关系定义为嵌入每个模型。但正如这里所说的,已经不再支持嵌入式记录功能:我不确定基本的嵌入式记录功能是否仍然适用于最新版本的余烬数据。但您将记录定义为嵌入的,如下所示:
{
"inventory": {
"entry_time": "2014-02-05",
"client_id": 1,
"user_id": 1,
"product_stock_levels": [
{
"product_id": 1,
"quantity": 2
},
{
"product_id": 2,
"quantity": 0
},
{
"product_id": 3,
"quantity": 8
}
]
}
}
App.InventorySerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
productStockLevels: {embedded: 'always'}
}
});
由于核心团队停止了对该嵌入式记录功能的支持,而且它非常基本,如果您需要对嵌入式记录的支持,我建议您使用embbedadapter
或EmbeddedMixin
。你可以在这里找到它们:
但作为EmbeddedAdapter的EmbeddedAdapter还不稳定。如果您在定义API时有灵活性,也许您应该考虑不嵌入记录来减少复杂性。应该有可能添加的指令。只需提交表格并观看网络活动。另外,请注意控制台日志,数量显示正确,因此数据就在那里。为这把小提琴制作了一个分叉,在记录中添加了一个道具,该道具位于有效负载中,因此问题实际上只是“hasMany”记录。到目前为止,我必须分两步来做。我保存父记录并在promise->中保存子记录集。尽管它在使用真实数据时总共向服务器发出了大约10个调用。这真的不能很好地扩展,一次完成20-30个产品。感谢您的反馈。我试着把这个添加到小提琴上:它似乎并没有改变有效载荷。我一直在读你链接的转换日志,听起来这是为了反序列化。我甚至完全可以不嵌入子记录,而是创建一个类似于侧面加载请求的负载。只要我能以某种方式一次性提交整个表单,这样我就能正确地处理服务器端的所有内容。基本上与更新记录时的有效负载相同。对不起,是我的错。较长时间未使用内置嵌入式记录支持。我修正了答案。注意:您的服务器的响应是错误的。这就是服务器响应时出现错误的原因。很好,非常感谢。这是一个很好的选择。我使用自定义序列化程序手动执行此操作,但不知怎的,它将其他输入的记录弄乱了。谢谢你的快速回复!