如何使用不同的名称从模型映射到字段

How to map from model to field using a different name

我有一个模型,它有一个名称为 属性 的字段,例如:

fields: [{
        name: 'first',
        type: 'string'
    }]

现在我有一个显示字段来显示模型中的这个字段,但我不能将其命名为与模型中相同的名称,它看起来像这样:

 {
      xtype: 'displayfield',
      name: 'first'
 }

相反,我需要将该字段命名为如下所示的名称(与模型中给出的名称不同)

     {
          xtype: 'displayfield',
          name: 'firstName'
     }

现在我的问题是,如何才能将名称保留在模型中并为字段使用不同的名称?

我做了一些研究,发现 'mapping' 属性 在 Ext.data.field:

fields: [{
        name: 'first',
        type: 'string',
        mapping: 'firstName'
    }]

但是你需要给 nameProperty 配置值 'mapping' in the writer of the proxy,我不确定这是否是我要找的,因为我还没有成功工作(我认为作者是为了将数据发送回服务器)。
那么,我可以在其他地方指定 nameProperty 吗?我在正确的道路上吗?还有其他解决方案吗?

非常感谢。

您可以在您的模型中创建一个新的计算属性:

Ext.define('Customer', {
  extend: 'Ext.data.Model',
  fields: [{
    name: 'firstName',
    calculate: function() {
      return this.get('first');
    }
  }],
});

注意此代码对 ExtJS 版本 5 及更高版本有效。

使用mapping属性

如果您需要从服务器接收不同名称的字段,您可以使用mapping 属性。例如,如果您从服务器收到以下 JSON:

[{
  first_name: 'Dimitri',
  last_name: 'Kurashvili'
}]

然后在模型中:

Ext.define('Customer', {
  extend: 'Ext.data.Model',
  fields: [{
    name: 'firstName',
    mapping: 'first_name'
  }, {
    name: 'lastName',
    mapping: 'last_name'
  }],
});