我必须通过DS.store处理来自外部api(创建和更新)的HTTP方法。 Server期望create方法的其他字段,而不是update方法。例如:
json中POST的预期参数:
{
"name": "string",
"email": "string",
"login": "string",
"password": "string",
}
PUT方法的预期参数:
{
"name": "string",
"subdomain": "string",
"person": "string",
}
显然,我有其他形式的这些操作,但DS.store从DS.model获取请求的所有字段。我的模特:
export default DS.Model.extend({
login: DS.attr('string'),
password: DS.attr('string'),
name: DS.attr('string'),
subdomain: DS.attr('string'),
email: DS.attr('string'),
person: DS.attr('string'),
});
因此,例如,POST请求如下所示:
{
"name": "somethingName",
"email": "something@something.fuu",
"login": "login",
"password": "passw",
"subdomain": null,
"person": null
}
即使未预期的键具有空值或未定义值,我的服务器也会返回400(无法识别的参数“subdomian”,“person”)。 不幸的是,我没有访问服务器,所以我必须传递给服务器只有预期的参数。我在序列化器中尝试了类似的东西:
attrs: {
person: { serialize: false },
subdomain: { serialize: false },
}
但自然是它为PUT请求创建了错误...... 有没有办法只传递我的html表单中包含的params,或删除params,它们在请求服务器之前有null / undefined值?我知道,我可以使用除DS.store之外的其他东西,但我希望在客户端和服务器之间只有一个中间人的清晰代码。
答案 0 :(得分:1)
在Ember Data中,适配器确定数据如何持久保存到后端数据存储,例如REST API的URL格式和标头。
如果您的某个模型具有与其他后端进行通信的特殊规则,则可以通过运行命令来创建特定于模型的适配器
ember generate adapter adapter-name
有关自定义适配器的更多信息,请阅读以下链接
https://guides.emberjs.com/v2.6.0/models/customizing-adapters/