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

时间:2015-08-31 11:51:20

标签: javascript extjs extjs4 mapping field

我有一个具有name属性的字段的模型,例如:

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

现在我有一个显示字段来显示模型中的这个字段,但是我不能像模型中那样命名它,它看起来像这样:

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

相反,我需要将字段命名为下面显示的内容(与模型中给出的名称不同)

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

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

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

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

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

非常感谢你。

1 个答案:

答案 0 :(得分:1)

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

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'
  }],
});