ember.js Ember Data未正确序列化数组中对象的属性名称

7gyucuyw  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(141)

我有一个简单的模型(为这个问题做的),它有一个名为electricGuitars的属性,该属性有一些预定义的默认值。

export default class guitarCollectionModel extends Model {
  @attr('string') firstName;
  @attr('string') lastName;
  @attr({
    defaultValue() {
      return [
        {
          serialNumber: "sdfdsfadf",
          colorCode: "dsfsadfdfa"
        },
        {
          serialNumber: "234234234",
          colorCode: "234234234323"
        },
        {
          serialNumber: "oorprpprprpororprp",
          colorCode: "rproproroprporp"
        }
      ];
    }
  }) electricGuitars;
}

当我保存模型(this.model.save())时,Ember Data POST到我的API,并且 * 几乎 * 默认情况下所有内容都正确序列化(没有自定义序列化程序或适配器)。API期望所有属性名称都被 Jmeter 化。

{
  "data": {
    "attributes": {
      "first-name": null,
      "last-name": null,
      "electric-guitars": [
        {
          "serialNumber": "sdfdsfadf",
          "colorCode": "dsfsadfdfa"
        },
        {
          "serialNumber": "234234234",
          "colorCode": "234234234323"
        },
        {
          "serialNumber": "oorprpprprpororprp",
          "colorCode": "rproproroprporp"
        }
      ]
    },
    "type": "guitar-collection"
  }
}

问题是electricGuitars属性/数组中的serialNumbercolorCode属性 * 尚未 * 进行非字符化。
有没有简单的方法来实现这一点?

0lvr5msh

0lvr5msh1#

虽然JSON:API支持任何有效的JSON作为属性值,但Ember Data序列化程序不适用于嵌套的复杂对象。您可能会发现Ember Data Model Fragments适用于此,或嵌入式记录。

eqoofvh9

eqoofvh92#

一个选项是编写一个自定义的transform。在serialize函数中,您可以将其dasherize:

serialize(deserialized) {
  return Object.fromEntries(Object.entries(deserialized)
    .map(([key, val]) => [dasherize(key), val])
  )
}

然后指定自定义转换:

@attr('my-custom-transform', {

相关问题