如何使一个Ember数据模型适合多种形式?

时间:2017-03-05 12:08:06

标签: javascript ember.js ember-data

我必须通过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之外的其他东西,但我希望在客户端和服务器之间只有一个中间人的清晰代码。

1 个答案:

答案 0 :(得分:1)

在Ember Data中,适配器确定数据如何持久保存到后端数据存储,例如REST API的URL格式和标头。

如果您的某个模型具有与其他后端进行通信的特殊规则,则可以通过运行命令来创建特定于模型的适配器

ember generate adapter adapter-name

有关自定义适配器的更多信息,请阅读以下链接

https://guides.emberjs.com/v2.6.0/models/customizing-adapters/