【问题标题】:Can an Ember data record be created that doesn't fill in unset properties with undefined or null?是否可以创建不使用 undefined 或 null 填充未设置属性的 Ember 数据记录?
【发布时间】:2026-01-24 11:00:01
【问题描述】:

假设这是我的 ember 模型:

从“ember-data”导入 DS

export default DS.Model.extend({
  foo: DS.attr('string'),
  bar: DS.attr(undefined),
  fizz: DS.attr('string'),
  buzz: DS.attr('string')
})

这是我从表单中收集的一些数据:

let data = {
  foo: 'foo_value',
  bar: 'bar_value',
  fizz: 'fizz_value'
}

然后我将该数据传递给create 调用:

this.store.create('some_model', data)

不可避免地,我最终得到了一个带有属性 buzz 的 Ember 数据记录,设置为 undefined,即使我没有指定它。然后在海市蜃楼中,我可以看到这变成了以下 POST 正文:

{
  foo: 'foo_value',
  bar: 'bar_value',
  fizz: 'fizz_value',
  buzz: undefined
}

问题在于我的 API 不喜欢未定义、空或其他它认为“未设置”的值。我无法控制。

如果我没有在 create 调用中传递这些属性,我可以告诉 Ember 不要在模型上设置这些属性吗?

【问题讨论】:

  • 您使用的是哪个序列化程序?
  • 我们使用了一个轻量定制的 REST 序列化器,是处理这个的地方吗?
  • 我们最近切换到 JSONAPISerializer,但据我记得,根本没有设置的属性过去常常被跳过并且不通过适配器传输。我找不到任何合适的例子,但我想normalizeCreateRecordResponse() 可以提供帮助。

标签: ember.js ember-data undefined


【解决方案1】:

我会使用自定义序列化程序以 API 所期望的方式形成数据。

export default DS.JSONSerializer.extend({
  serialize(snapshot, options) {
    var json = this._super(...arguments);

    delete json.data.attributes.buzz;

    return json;
  }
});

https://guides.emberjs.com/v2.1.0/models/customizing-serializers/

【讨论】:

    最近更新 更多