在阅读器中定义映射

Posted

技术标签:

【中文标题】在阅读器中定义映射【英文标题】:Define mapping in reader 【发布时间】:2014-10-23 08:46:24 【问题描述】:

我已经定义了一个自定义 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",
]

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

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

【问题讨论】:

我想到了几个选项。 1.) 你能简单地将服务器上的数据转换成通用格式吗?如果希望将多个模型扁平化为相同的字段名称,最简单的方法是从服务器实际返回所需格式的数据。 2.) 如果您不想这样做,请记住,商店可以根据商店本身定义的 fields[] 配置动态创建隐式模型。这与源字段的映射相结合,可以让您将存储数据扁平化为通用字段架构。 【参考方案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

【讨论】:

以上是关于在阅读器中定义映射的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第26篇):将列表映射成字典

如何在Windows7系统中映射网络驱动器

ElasticSearch之映射常用操作

智能合约语言 Solidity 教程系列6 - 结构体与映射

阅读redis持久化RDB源码的时候一些c知识

阅读redis持久化RDB源码的时候一些c知识