我有一个EmberJS模型,它是从JSON对象初始化的。此JSON对象用于包含id
变量,但现在其名称已更改。有没有办法告诉模型从JSON中使用id
的内容?有些函数使用模型的id
变量,因此最好的方法是将id
设置为模型变量之一的引用。
答案 0 :(得分:2)
您可以创建名称与模型匹配的序列化程序(ember generate serializer [name]
),并设置应使用的primaryKey
代替默认id
。
如果您的后端使用id以外的密钥,则可以使用序列化程序的primaryKey属性在序列化和反序列化数据时将id属性正确转换为id。
// app/serializers/modelName.js
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
primaryKey: '_id'
});
https://guides.emberjs.com/release/models/customizing-serializers/#toc_ids
或者,如果您希望将primaryKey维持为id
,则可以使用序列化程序通过normalizeResponse
方法将值复制到id
属性:
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload.data.id = payload.data.newModelId;
delete payload.data.newModelId;
return this._super(...arguments);
}
});