jenna_3108
jenna_3108

Reputation: 435

extjs 3.4.0 - How to filter store that reads JSON

I'm trying to filter my JSON that has value of 32 for privilege field. I've tried multiple ways of filtering it but still it's returning me all rows instead the filtered ones.

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');
    });

Current my JSON is as below

{
"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
    }
}

Appreciate if someone can guide me on how to filter JSON by a specific field which has the Keys as root?

Upvotes: 0

Views: 1241

Answers (1)

Zhorov
Zhorov

Reputation: 29973

This may help you. Add privileges field in JSONReader and filter store after store is loaded:

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'
        });
});

Upvotes: 1

Related Questions