我已经定义了一个自定义的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的departmentStore,以及服务器响应可能在哪里
{
"data" : [
{"departmentId": 1, "departmentName": "Sales"},
{"departmentId": 2, "departmentName": "Marketing"},
]
}
我想在Reader中定义一个映射,其中包含在不同商店中以不同方式映射数据的说明,例如:employeeId应该映射到' id' &安培; employeeName to' name'在employeeStore中,而departmentId应映射到' id' &安培; departmentName to' name'在departmentStore。
我已经看到有为模型中的每个字段定义映射的选项,但我想在Reader中定义映射,因为服务器使用关系数据库中的数据进行响应,其中字段名称将是columnNames。
答案 0 :(得分: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' },
]
}
}
这也是一个很好的例子:Basic Meta Data Config