Search code examples
extjsextjs6

Accessing additional properties from JSON received through store's load method


I have a grid that loads data via a JSON store, however there are some additional properties beyond the records themselves that I need to access. Here's an example of what the JSON data looks like:

{
    success: true,
    records: [
        {id: 1, name: 'bob'},
        {id: 2, name: 'fred'}
    ],
    extraProperty: 'foo'
}

I need to access that extraProperty when the grid data is loaded. So I assume I'd want to a callback, like so:

store.load({
    callback: function (records, operation, success) {
        //somehow access extraProperty here
    }
});

I'm not sure what to do inside that callback. The operation variable, an Ext.data.operation.Operation object, has a private method called getResponse(). It returns an object in Chrome that has a responseJson property, but in IE it instead has a responseText property that needs to be decoded. So I could handle both scenarios, but since it's a private method I don't really want to rely on it in the first place. Any ideas?


Solution

  • Use the keepRawData config on the reader.

    store.load({
        callback: () => {
            const { extraProperty } = store.getProxy().getReader().rawData;
        }
    });
    

    Depending on your needs, you may also want to look at preserveRawData as well.