ember.js - Ember.js - 如何处理 API-Platform - 资源链接而不是有效负载中的 Id
问题描述
我将 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-platform 选项: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);
},
});
推荐阅读
- javascript - 如何使用 CSS 和 JavaScript 改进切换菜单?
- java - 如何使用连接删除 sqlplus 命令中的匹配记录
- amazon-s3 - 气流,BashOperator 错误“[Errno 2] 没有这样的文件或目录:'bash':'bash'”
- python - 有没有办法从 C 代码中检查 Python AST 对象的 PyType?
- python - 进程使用 GridSearchCV 以退出代码 134(被信号 6:SIGABRT 中断)完成
- android - compose 中的主题依赖资源
- r - 异方差检验 R()
- java - Apache Camel 自定义组件迁移端点异常
- html - CSS:当文本进入下一行时,使 flexbox 中的面向行的 div 尽可能小
- guidewire - 无法从相关方屏幕更新 CC 中的联系方式