首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数据推送到带有JSONSerializer的模型的Ember存储中,因为它是在Ember中嵌入了JSONAPISerializer或RESTSerializer的序列化程序?

如何将数据推送到带有JSONSerializer的模型的Ember存储中,因为它是在Ember中嵌入了JSONAPISerializer或RESTSerializer的序列化程序?
EN

Stack Overflow用户
提问于 2018-08-31 07:11:04
回答 1查看 1.4K关注 0票数 2

对于使用JSONAPISerializer作为序列化程序的模型,为该模型推送记录

进入商店是由store.push(dataInJSONAPISerializerFormat)完成的

https://www.emberjs.com/api/ember-data/3.3/classes/DS.Store/methods/push?anchor=push

用于使用RESTSerializer作为序列化程序的模型的method.But,该序列化程序推动该模型的记录

进入商店的模型由store.pushPayload("modelName",dataInRESTSerializerFormat)完成

https://www.emberjs.com/api/ember-data/3.3/classes/DS.Store/methods/pushPayload?anchor=pushPayload

但是如果是JSONSerializer,他们两个都不起作用了?有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 10:13:23

您误解了push和DS.Store的pushPayload方法之间的区别。

方法“用于通知Ember数据存储后端中存在的新记录或更新记录。它需要一个“规范化的JSON文档”。规范化意味着它不仅必须符合JSON API规范,而且还要遵循一些更严格的约定。

如果负载还不是规范化的JSON文档,则必须将其转换为一些文档。这通常是由序列化程序完成的。如果这个序列化程序是由DS.JSONSerializerDS.RestSerializer或者仅仅是基类DS.Serializer类扩展的,这并不重要。即使您使用的是DS.JSONAPISerializer,如果负载没有标准化,您可能需要序列化它(例如,type不是复数的)。

方法“是用于反序列化有效负载的store#push的方便包装器”。因此,这只不过是对所提供的数据应用序列化程序,并将规范化数据推入存储区。

序列化程序必须通过实现store.pushPayload()方法来支持pushPayload()。并非所有随Ember数据提供的序列化程序都支持它。DS.JSONSerializer没有。您可以实现它,也可以直接调用normalizeResponse()并将规范化的响应传递给store.push()。实现pushPayload可能是困难的,也可能不是困难的,这取决于具体的API实现和您想要支持的用例,因为您必须知道主模型的类和请求类型。根据您的API,这些信息可能在有效负载中可用,也可能不可用。

请注意,正在进行中的讨论反对pushPayloadhttps://github.com/emberjs/rfcs/issues/357。这可能是另一个不为您的DS.JSONSerializer实现自定义解决方案而是使用serializer.normalizeResponse()store.push()的参数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52110251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档