Ember.js - 如何处理 API-平台 - 资源 link 而不是负载中的 Id
Ember.js - How to deal with API-Platform - resource link instead of Id in payload
我将 Emberjs 3.2 与 Api-Platform 一起使用,我 运行 遇到以下问题:
这是我的 API 负载:
{
"id": "/api/articles/0d8cb40c-221b-4c54-9e29-43877093b839",
"type": "Article",
"attributes": {
"_id": "0d8cb40c-221b-4c54-9e29-43877093b839",
"title": "Article",
"content": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
"dateCreated": "2018-07-17T18:20:29+03:00",
"dateUpdated": "2018-07-17T18:20:29+03:00"
},
"relationships": {
"author": {
"data": {
"type": "User",
"id": "/api/users/b26e0381-6800-4f47-b269-9a92b27ad331"
}
}
}
}
如您所见,我在有效载荷中得到了一个 IRI 而不是 id。
我开启了api-平台选项:allow_plain_identifiers: true
但我仍然得到 IRI 而不是相关实体的 ID。
如何使用 EmberData JSONApi 适配器处理此问题?
我很感激任何想法!
Ember 数据提供了一种有用的序列化程序方法来处理这种情况:normalizeResponse
.
您可以使用 ember generate serializer <modelName>
创建一个序列化程序(如果所有模型都需要此模式,您可以创建一个 application
序列化程序或从基本序列化程序继承。您可能需要这个您的一个或所有模型。
Ember 指南对此提供了准确的解决方案:https://guides.emberjs.com/release/models/customizing-serializers/
在您的示例中,您可以这样做:
export default DS.JSONAPISerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload.data.id = payload.data.attributes._id;
delete payload.data.attributes._id;
return this._super(...arguments);
},
});
我将 Emberjs 3.2 与 Api-Platform 一起使用,我 运行 遇到以下问题:
这是我的 API 负载:
{
"id": "/api/articles/0d8cb40c-221b-4c54-9e29-43877093b839",
"type": "Article",
"attributes": {
"_id": "0d8cb40c-221b-4c54-9e29-43877093b839",
"title": "Article",
"content": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
"dateCreated": "2018-07-17T18:20:29+03:00",
"dateUpdated": "2018-07-17T18:20:29+03:00"
},
"relationships": {
"author": {
"data": {
"type": "User",
"id": "/api/users/b26e0381-6800-4f47-b269-9a92b27ad331"
}
}
}
}
如您所见,我在有效载荷中得到了一个 IRI 而不是 id。
我开启了api-平台选项:allow_plain_identifiers: true 但我仍然得到 IRI 而不是相关实体的 ID。
如何使用 EmberData JSONApi 适配器处理此问题?
我很感激任何想法!
Ember 数据提供了一种有用的序列化程序方法来处理这种情况:normalizeResponse
.
您可以使用 ember generate serializer <modelName>
创建一个序列化程序(如果所有模型都需要此模式,您可以创建一个 application
序列化程序或从基本序列化程序继承。您可能需要这个您的一个或所有模型。
Ember 指南对此提供了准确的解决方案:https://guides.emberjs.com/release/models/customizing-serializers/
在您的示例中,您可以这样做:
export default DS.JSONAPISerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload.data.id = payload.data.attributes._id;
delete payload.data.attributes._id;
return this._super(...arguments);
},
});