0

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

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"},
]
}    

我可以有多个这样的商店,例如具有不同代理 URL 的部门商店,并且服务器响应可能是

{
"data" : [
    {"departmentId": 1, "departmentName": "Sales"},
    {"departmentId": 2, "departmentName": "Marketing"},
]
}

我想在阅读器中定义一个映射,说明在不同的商店中以不同的方式映射数据,如..employeeId 应该映射到employeeStore 中的“id”和employeeName 到“name”,而departmentId 应该映射到“id” & departmentName 到 departmentStore 中的“名称”。

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

4

1 回答 1

1

您可以做的是metaData从服务器发送到客户端。

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

这也是一个很好的例子:基本元数据配置

于 2014-10-24T08:06:42.940 回答