是否有一种方法可以使用与JSON中's不同的属性名?

Is there a way to use a different property name than what's in my JSON?

本文关键字:属性 JSON 一种 可以使 方法 是否      更新时间:2023-09-26

我有以下JSON(简单的例子):

{
  id:        101,
  firstName: "John",
  surname:   "Doe"
}

但是我希望我的模型使用lastName而不是surname。像这样,比如:

App.Person = DS.Model.extend({
  firstName: DS.attr('string'),
  lastName:  DS.attr('string', { key: 'surname' })
});

我可以发誓,我看到什么地方显示如何做到这一点,但我的生活,找不到它。我也没有在ember-data数据源中发现任何明显的东西。

我试过在属性选项中设置key, name, id, aliasmap,但似乎没有人能做到这一点。有办法做到这一点吗?

您应该能够通过REST适配器做到这一点。文档中包含了一个映射"不规则键"到下划线属性名称下的示例:

可以在适配器上映射不规则的键。如果JSON的键为lastNameOfPerson,而所需的属性名称仅为lastName,则通知适配器:

App.Person = DS.Model.extend({
  lastName: DS.attr('string')
});
DS.RESTAdapter.map('App.Person', {
  lastName: { key: 'lastNameOfPerson' }
});

在你的例子中:

DS.RESTAdapter.map('App.Person', {
    lastName: { key: 'surname' }
});
同样值得注意的是,Ember期望JSON具有first_name,而模型具有firstName。因此,这可能也需要显式调整