ExtJS:整合商店中的记录

时间:2013-09-13 03:53:58

标签: extjs extjs4

考虑一个简单的例子,考虑以下记录存储:

{ item: 'A', group: 'red', quantity: 1 }, 
{ item: 'A', group: 'green', quantity: 1 }, 
{ item: 'B', group: 'red', quantity: 1 }, 
{ item: 'B', group: 'blue', quantity: 1 },
{ item: 'C', group: 'green', quantity: 1 }

我的目标是将每个不同group字段的网格作为过滤器,其中所有有效过滤器将quantity合并到唯一的item'秒。例子:

// show: red, green          // show: green           // show: red, blue
item | quantity              item | quantity          item | quantity
---------------              ---------------          ---------------
 A   |   2                     A  |   1                 A  |   1
 B   |   1                     C  |   1                 B  |   2
 C   |   1

有没有内置的方法来处理这个?我的想法是:

  1. 首先在group上应用文件管理器。然后使用collect将剩余的所有唯一item作为行的基础。为每个项目执行find并总结结果的数量。
  2. 重新思考我的模型:
  3. { 
        item: 'A', quantities: [
            { group: 'red', quantity: 1 }, { group: 'green', quantity: 2 }
        ]
    }
    

    思想?

1 个答案:

答案 0 :(得分:1)

ExtJS网格具有开箱即用的分组视图,可能非常适合您的工作。

docs的设置如下:

var store = Ext.create('Ext.data.Store', {
    storeId:'employeeStore',
    fields:['name', 'seniority', 'department'],
    groupField: 'department',
    data: {'employees':[
        { "name": "Michael Scott",  "seniority": 7, "department": "Management" },
        { "name": "Dwight Schrute", "seniority": 2, "department": "Sales" },
        { "name": "Jim Halpert",    "seniority": 3, "department": "Sales" },
        { "name": "Kevin Malone",   "seniority": 4, "department": "Accounting" },
        { "name": "Angela Martin",  "seniority": 5, "department": "Accounting" }
    ]},
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            root: 'employees'
        }
    }
});

Ext.create('Ext.grid.Panel', {
    title: 'Employees',
    store: Ext.data.StoreManager.lookup('employeeStore'),
    columns: [
        { text: 'Name',     dataIndex: 'name' },
        { text: 'Seniority', dataIndex: 'seniority' }
    ],
   features: [{ftype:'grouping'}],
    width: 200,
    height: 275,
    renderTo: Ext.getBody()
});

一般来看,通过Sencha网页上的示例,它将为您提供有关如何设计组件及其背后代码的许多有用的想法。