extjs 3.4.0 - 如何过滤读取 JSON 的存储

Posted

技术标签:

【中文标题】extjs 3.4.0 - 如何过滤读取 JSON 的存储【英文标题】:extjs 3.4.0 - How to filter store that reads JSON 【发布时间】:2018-11-30 07:55:16 【问题描述】:

我正在尝试为privilege 字段过滤具有32 值的JSON。我尝试了多种过滤它的方法,但它仍然返回所有行而不是过滤后的行。

Ext.onReady(function ()         

        // create the data store
        var store = new Ext.data.Store(
            url: url,
            reader: new Ext.data.JsonReader(
                root: 'keys',
                idProperty: 'key',
                fields: ['key', 'name']
            ),
            autoLoad: true
        );

        store.filter(
            property: 'privileges',
            value: 32,
            type: 'int',
            exactMatch: true
        );

        //create the Grid
        var grid = new Ext.grid.GridPanel(
            store: store,
            columns: [
                
                    id       :'name',
                    header   : 'Name', 
                    width    : 500, 
                    sortable : true, 
                    dataIndex: 'name'
                ,
                
                    header   : 'Key', 
                    width    : 500, 
                    sortable : false, 
                    dataIndex: 'key'
                ,
                
                    header   : 'Regenerate', 
                    width    : 300, 
                    dataIndex: ''
                
            ],
            stripeRows: true,
            height: 350,
            title: 'Administrator Keys'
        );

        grid.render('restApiKeyContent');
    );

当前我的 JSON 如下


"id": "abc123",
"name": "Test",
"queue": "test",
"expire": "2118-11-27T02:05:15.546778Z",
"keys": [
    
        "key": "64654asdsad1sd1",
        "customer": "Test Customer",
        "externalUser": "123213",
        "name": "Jenna Testing API Key 1",
        "privileges": 31
    ,
    
        "key": "7c5362f98f084ae7b76b8484f660fdcf",
        "customer": "Test Customer",
        "externalUser": "123213",
        "name": "Jenna Testing API Key 1",
        "privileges": 16
    

如果有人可以指导我如何按以 Keys 为根的特定字段过滤 JSON,不胜感激?

【问题讨论】:

【参考方案1】:

这可能会对您有所帮助。在 JSONReader 中添加 privileges 字段并在 store 加载后过滤 store:

Ext.onReady(function ()         

        // create the data store
        var store = new Ext.data.Store(
            url: 'filter-store-extjs3.json',
            reader: new Ext.data.JsonReader(
                root: 'keys',
                idProperty: 'key',
                fields: ['key', 'name', 'privileges']
            ),
            autoLoad: true,
            listeners: 
                load: function() 
                    store.filter('privileges', '16', true, true);
                
            
        );

        var grid = new Ext.grid.GridPanel(
            renderTo: Ext.getBody(),
            store: store,
            columns: [
                
                    id       :'name',
                    header   : 'Name', 
                    width    : 500, 
                    sortable : true, 
                    dataIndex: 'name'
                ,
                
                    header   : 'Key', 
                    width    : 500, 
                    sortable : false, 
                    dataIndex: 'key'
                ,
                
                    header   : 'Regenerate', 
                    width    : 300, 
                    dataIndex: ''
                
            ],
            stripeRows: true,
            height: 350,
            title: 'Administrator Keys'
        );
);

【讨论】:

是的,它有效!我没有想过在该领域添加“特权”。非常感谢!

以上是关于extjs 3.4.0 - 如何过滤读取 JSON 的存储的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 extjs 阅读器来读取这个 json?

EXTJS 4.1 如何在不重新加载 TreeStore 的情况下删除过滤器

带有 JSON 读取的 EXTJS 4 表单填充

如何使用 ExtJS JSONReader 读取不可迭代的参数

ExtJS 3.4.0 GridView body 和 header 有不同的宽度

在 ExtJs 中本地过滤组合框远程存储