Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization 如何将数据推送到具有JSONSerializer作为序列化程序而不是ember js中的JSONAPISerializer或RESTSerializer的模型的ember存储区?_Serialization_Ember.js_Ember Data - Fatal编程技术网

Serialization 如何将数据推送到具有JSONSerializer作为序列化程序而不是ember js中的JSONAPISerializer或RESTSerializer的模型的ember存储区?

Serialization 如何将数据推送到具有JSONSerializer作为序列化程序而不是ember js中的JSONAPISerializer或RESTSerializer的模型的ember存储区?,serialization,ember.js,ember-data,Serialization,Ember.js,Ember Data,对于使用JSONAPISerializer作为序列化程序的模型,推送该模型的记录 通过store.pushDataInInsonapiSerializerFormat进入存储区 但是对于使用RESTSerializer作为序列化程序的模型,它会为此推送一条记录 通过store.pushPayloadmodelName、dataInRESTSerializerFormat将模型导入存储 方法 但是在JSONSerializer的情况下,它们都不起作用了吗?有人能帮我吗?您误解了DS.Store的

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

通过store.pushDataInInsonapiSerializerFormat进入存储区

但是对于使用RESTSerializer作为序列化程序的模型,它会为此推送一条记录

通过store.pushPayloadmodelName、dataInRESTSerializerFormat将模型导入存储

方法


但是在JSONSerializer的情况下,它们都不起作用了吗?有人能帮我吗?

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

用于将后端中存在的新记录或更新记录通知余烬数据的存储。它需要一个规范化的JSON API文档。规范化意味着它不仅必须遵守而且必须遵循一些更严格的约定

如果您的负载还不是一个规范化的JSON API文档,那么您必须将其转换为一些。这通常由序列化程序完成。不管这个序列化程序是扩展到基类还是扩展到基类。即使您使用的是,如果负载未规范化(例如,类型未多重化),您也可能需要序列化负载

是一个方便的storepush包装器,它将反序列化有效负载。因此,这只不过是在提供的数据上应用序列化程序并将规范化数据推送到存储中

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


请注意,目前正在进行讨论,反对pushPayload:。这可能是不为DS.JSONSerializer实现自定义解决方案而使用serializer.NormalizerResponse和store.push的另一个理由。

首先非常感谢您的回答,我理解您对pushPayload和push方法的看法,但我想知道的是如何将记录推入存储使用JSONSerializer或RESTSerializer作为序列化程序的模型。我不知道如何推送使用这两个序列化程序而不是JSONAPISerializer的模型的记录。推送JSONAPISerializer模型的记录工作正常,因为它的模型数据已经是JSON API格式的。我扩展了我的答案。希望现在很清楚,所使用的序列化程序并不重要。这只是你的负载是否已经是一个规范化的JSON API文档的问题。jelhan我完全明白,使用的序列化程序并不重要,因为我们必须选择与后端API响应关系或格式更密切的序列化程序来规范负载,但我只想知道如果我明确想要使用JSONSerializer那么我应该如何将记录添加到我的余烬存储中?您可以将一些现有的序列化程序代码添加到问题中吗?有助于了解差距在哪里。确定@NullVoxPopuli