Extjs 在reader中定义映射

Extjs 在reader中定义映射,extjs,jsonreader,Extjs,Jsonreader,我已经定义了一个自定义的组合框组件,我想在多个存储中重复使用它。它有一个简单的配置,如下所示 Ext.define('Myapp.CustomCombo', { extend: 'Ext.form.ComboBox', valueField: 'id', displayField: 'name' }); 模型是 Ext.define('Myapp.model.ComboModel',{ extend: 'Ext.data.Model', fields: [ { name: 'id',

我已经定义了一个自定义的组合框组件,我想在多个存储中重复使用它。它有一个简单的配置,如下所示

Ext.define('Myapp.CustomCombo', {
extend: 'Ext.form.ComboBox',
valueField: 'id',
displayField: 'name'
});
模型是

Ext.define('Myapp.model.ComboModel',{
extend: 'Ext.data.Model',
fields: [
    { name: 'id', type: 'int' },
    { name: 'name', type: 'string' },
    { name: 'linkCls', type: 'string' }
]
});
我定义了多个存储,每个存储都有自己的代理配置&由唯一的storeId标识,如下所示

Ext.create('Myapp.store.EmployeeComboStore', {
model: 'Myapp.model.ComboModel',
storeId: 'employeeLOVComboStore',
proxy: {
    type: 'rest',
    url: '/employees/getLovData',
    reader: {
        type: 'json',
        rootProperty: 'data'
    }
}
});
服务器用json响应,如下所示

{
"data" : [
    {"employeeId": 1, "employeeName": "Chris"},
    {"employeeId": 2, "employeeName": "Jack"},
]
}    
我可以有多个这样的商店,比如departmentStore,它具有不同的代理URL,在其中,服务器响应可以是

{
"data" : [
    {"departmentId": 1, "departmentName": "Sales"},
    {"departmentId": 2, "departmentName": "Marketing"},
]
}
我想在Reader中定义一个映射,并给出在不同存储中不同映射数据的说明,如。。employeeId应映射到employeeStore中的'id',employeeName映射到'name',而departmentId应映射到departmentStore中的'id',departmentName映射到'name'


我已经看到,有一些选项可以为模型中的每个字段定义映射,但我希望在读卡器中定义映射,因为服务器使用关系数据库中的数据进行响应,其中字段名就是列名。

您可以做的是,将
元数据从服务器发送到客户端

json响应可以如下所示:

{
  data: [{ ... }],
  msg: "...",
  total: 99,
  metaData: {
    fields: [{ ... }],
    columns: [{ ... }],
    idProperty: "id",
    messageProperty: "msg",
    root: "data"
  }
}
在您的情况下,如果json响应如下所示就足够了

{
  data: [{ ... }],
  metaData: {
    fields: [
        { name: 'Id', type: 'int', mapping: 'departmentId' },
        { name: 'Name', type: 'string', mapping: 'departmentName' },
    ]
  }
}

这里还有一个很好的例子:我想到了几个选项。1.)您可以简单地转换服务器上的数据以生成通用格式吗?如果希望将多个模型扁平化为相同的字段名,最简单的方法是从服务器实际返回所需格式的数据。2.)如果不想这样做,请记住,存储可以根据存储本身定义的字段[]配置动态创建隐式模型。这与源字段的映射相结合,将允许您将存储数据扁平化为公共字段体系结构。