Store.push(type,data)已被弃用。请提供JSON-API文档对象作为store.push
的第一个也是唯一的参数我刚刚更新为ember 1.13.2和ember-data 1.13.3,我现在收到了很多本帖子中提到的弃用消息。我不知道导致它出现的原因,而且Ember Inspector的弃用标签也没有显示我的代码在问题所在的位置。
如果有人能够向我解释这条消息的含义以及我需要做些什么来解决它,我将不胜感激。
感谢。
更新:
我的自定义应用程序适配器如下所示:
// app/adapters/application.js
import ActiveModelAdapter from 'active-model-adapter';
export default ActiveModelAdapter.extend({
host: 'http://dev.mydomain.com',
namespace: 'api/v1',
});
它使用ActiveModelAdapter附加组件作为不同的弃用消息,解释了自v2.0.0起,ActiveModelAdapter将不再与ember-data捆绑在一起。但是,我已经使用ember-data适配器和add on尝试了我的代码,我得到了关于Store.push的相同弃用消息。
有一些堆栈跟踪,因为有相同弃用的多个版本,但这里有几个:
DEPRECATION: store.push(type, data) has been deprecated. Please provide a JSON-API document object as the first and only argument to store.push.
at ember$data$lib$system$store$$Service.extend.push (http://localhost:4200/assets/vendor.js:81014:17)
at http://localhost:4200/assets/vendor.js:83253:17
at Array.forEach (native)
at Ember.Mixin.create._extractEmbeddedHasMany (http://localhost:4200/assets/vendor.js:83251:68)
at null.<anonymous> (http://localhost:4200/assets/vendor.js:83219:22)
at http://localhost:4200/assets/vendor.js:84254:20
at cb (http://localhost:4200/assets/vendor.js:27380:11)
at OrderedSet.forEach (http://localhost:4200/assets/vendor.js:27163:11)
at Map.forEach (http://localhost:4200/assets/vendor.js:27384:18)
DEPRECATION: store.push(type, data) has been deprecated. Please provide a JSON-API document object as the first and only argument to store.push.
at ember$data$lib$system$store$$Service.extend.push (http://localhost:4200/assets/vendor.js:81014:17)
at Ember.Mixin.create._extractEmbeddedBelongsTo (http://localhost:4200/assets/vendor.js:83302:15)
at null.<anonymous> (http://localhost:4200/assets/vendor.js:83226:22)
at http://localhost:4200/assets/vendor.js:84254:20
at cb (http://localhost:4200/assets/vendor.js:27380:11)
at OrderedSet.forEach (http://localhost:4200/assets/vendor.js:27163:11)
at Map.forEach (http://localhost:4200/assets/vendor.js:27384:18)
at Function.ember$data$lib$system$model$$default.reopenClass.eachRelationship (http://localhost:4200/assets/vendor.js:84253:83)
at Ember.Mixin.create._extractEmbeddedRecords (http://localhost:4200/assets/vendor.js:83212:19)
添加后的新错误isNewSerailizerAPI:真正的SERIALIZERS(见答案):
Error while processing route: elavonApplication.index Cannot read property 'id' of undefined TypeError: Cannot read property 'id' of undefined
at ember$data$lib$serializers$embedded$records$mixin$$_newExtractEmbeddedBelongsTo (http://localhost:4200/assets/vendor.js:83482:33)
at Ember.Mixin.create._extractEmbeddedBelongsTo (http://localhost:4200/assets/vendor.js:83349:98)
at null.<anonymous> (http://localhost:4200/assets/vendor.js:83419:19)
at http://localhost:4200/assets/vendor.js:84310:20
at Map.forEach.cb (http://localhost:4200/assets/vendor.js:27380:11)
at OrderedSet.forEach (http://localhost:4200/assets/vendor.js:27163:11)
at Map.forEach (http://localhost:4200/assets/vendor.js:27384:18)
at Function.ember$data$lib$system$model$$default.reopenClass.eachRelationship (http://localhost:4200/assets/vendor.js:84309:83)
at ember$data$lib$serializers$embedded$records$mixin$$_newExtractEmbeddedRecords (http://localhost:4200/assets/vendor.js:83413:17)
at Ember.Mixin.create._extractEmbeddedRecords (http://localhost:4200/assets/vendor.js:83265:96)
从服务器返回的JSON确实包含&#34; id&#34;字段,但序列化程序似乎无法找到它,因为我们得到错误,模型没有填充到Ember商店。
失败的行是:
// assets/vendor.js
var belongsTo = { id: data.id, type: data.type };
在关注&#34;数据&#34;变量在哪里&#34; id&#34;正在寻找它是&#34;未定义&#34;。 &#34;数据&#34;变量在代码中定义为:
var data = _normalizeEmbeddedRelationship2.data;
所以我不知道这是否提供了最近考虑所有余烬数据变化的线索?
我也有一个可能与以下问题有关的弃用:
Ember Inspector (Deprecation Trace): Your custom serializer uses the old version of the Serializer API, with `extract` hooks. Please upgrade your serializers to the new Serializer API using `normalizeResponse` hooks instead.
at ember$data$lib$system$store$serializer$response$$normalizeResponseHelper (http://localhost:4200/assets/vendor.js:74034:15)
at http://localhost:4200/assets/vendor.js:75772:25
at Object.Backburner.run (http://localhost:4200/assets/vendor.js:10776:25)
at ember$data$lib$system$store$$Service.extend._adapterRun (http://localhost:4200/assets/vendor.js:81352:33)
at http://localhost:4200/assets/vendor.js:75771:15
at tryCatch (http://localhost:4200/assets/vendor.js:65295:14)
at invokeCallback (http://localhost:4200/assets/vendor.js:65310:15)
at publish (http://localhost:4200/assets/vendor.js:65278:9)
at http://localhost:4200/assets/vendor.js:42094:7
另外,重申我现在正在使用active-model-adapter附加组件而不是与ember-data捆绑的附加组件作为建议的早期弃用消息。在最近的所有更新之后,不确定这个附加组件是否与ember-data不兼容? (刚刚通过恢复原始的捆绑适配器来测试它,但仍然会出现相同的错误。)
答案 0 :(得分:6)
如果你设置:
isNewSerializerAPI: true
在您的序列化程序上,它应该可以解决问题。
答案 1 :(得分:0)
好的,这个问题似乎已经被最近的ember-data 1.13.4更新修复了。一旦我删除了我们之前尝试使用的修复:
isNewSerializerAPI: true
在序列化程序上(导致其他问题)并更新到1.13.4,一切都可以正常工作。
感谢您提供的帮助。
答案 2 :(得分:0)
根据release docs push()现在将JSON API兼容的有效负载作为唯一参数。以前传递给push的类型以JSON API格式存在,因此不再需要单独使用。要开展这项工作&#34;开箱即用&#34;您的API源必须返回有效的JSON API JSON数据。
如果无法做到这一点,您需要一个自定义序列化程序来实现转换方法,以将您的API的JSON格式转换为JSON API格式。我认为你可以在&#34; normalizeResponse&#34;在序列化程序中。可以在here in the release docs
找到从旧的Serializer API过渡到新的详细信息