【问题标题】:ExtJS: consolidating records in storeExtJS:整合存储中的记录
【发布时间】:2013-09-13 12:52:35
【问题描述】:

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

{ 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. 将我的模型重新考虑为:

.

{ 
    item: 'A', quantities: [
        { group: 'red', quantity: 1 }, { group: 'green', quantity: 2 }
    ]
}

想法?

【问题讨论】:

    标签: extjs extjs4


    【解决方案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 网页上的示例,它会给你很多关于如何设计你的组件和它们背后的代码的有用的想法。

    【讨论】:

    • 今晚你帮了大忙。话虽如此 - 我已经看过这些文档 - 但我希望有一种方法可以进行分组,最终“组”合并成为行原语。更接近于仅在此处显示摘要:docs.sencha.com/extjs/4.1.3/#!/example/grid/…
    • 感谢您的客气话。如果开箱即用的分组不合适,那么您可以做两件事之一。 A)创建 3 个过滤器以根据功能提取数据(请参阅网格文档以了解过滤器),并在工具栏上添加 3 个按钮来触发您的过滤器。 B)使用网格过滤器用户扩展。这会将菜单项添加到列中。在 Size 列下查看此示例:docs.sencha.com/extjs/4.1.3/#!/example/grid-filtering/…
    • 啊,是的,我见过这些。仍然 - 列的过滤/分组不是瓶颈;它获取这些过滤器/组的 results,并将单个组/过滤器结果中的所有记录映射到 single 行,该行的列条目依赖于所有贡献的记录
    • 可能更适合服务器端功能。
    • 是的 - 这几乎就是我认为需要的。不过感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 2013-04-27
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2011-05-16
    相关资源
    最近更新 更多