Properties Methods Events Config Options Direct Link
DataReader
  JsonReader

Class Ext.data.JsonReader

Package:Ext.data
Defined In:JsonReader.js
Class:JsonReader
Subclasses:ArrayReader
Extends:DataReader

Data reader class to create an Array of Ext.data.Record objects from a JSON response based on mappings in a provided Ext.data.Record constructor.

Example code:

var Employee = Ext.data.Record.create([
    {name: 'firstname'},                  // map the Record's "firstname" field to the row object's key of the same name
    {name: 'job', mapping: 'occupation'}  // map the Record's "job" field to the row object's "occupation" key
]);
var myReader = new Ext.data.JsonReader(
    {                             // The metadata property, with configuration options:
        totalProperty: "results", //   the property which contains the total dataset size (optional)
        root: "rows",             //   the property which contains an Array of record data objects
        idProperty: "id"          //   the property within each row object that provides an ID for the record (optional)
    },
    Employee  // Ext.data.Record constructor that provides mapping for JSON object
);

This would consume a JSON data object of the form:

{
    results: 2,  // Reader's configured totalProperty
    rows: [      // Reader's configured root
        { id: 1, firstname: 'Bill', occupation: 'Gardener' },         // a row object
        { id: 2, firstname: 'Ben' , occupation: 'Horticulturalist' }  // another row object
    ]
}

Automatic configuration using metaData

It is possible to change a JsonReader's metadata at any time by including a metaData property in the JSON data object. If the JSON data object has a metaData property, a Store object using this Reader will reconfigure itself to use the newly provided field definition and fire its metachange event. The metachange event handler may interrogate the metaData property to perform any configuration required. Note that reconfiguring a Store potentially invalidates objects which may refer to Fields or Records which no longer exist.

The metaData property in the JSON data object may contain:

  • any of the configuration options for this class
  • a fields property which the JsonReader will use as an argument to the data Record create method in order to configure the layout of the Records it will produce.
  • a sortInfo property which the JsonReader will use to set the Ext.data.Store's sortInfo property
  • any user-defined properties needed

To use this facility to send the same data as the example above (without having to code the creation of the Record constructor), you would create the JsonReader like this:

var myReader = new Ext.data.JsonReader();

The first data packet from the server would configure the reader by containing a metaData property and the data. For example, the JSON data object might take the form:

{
    metaData: {
        idProperty: 'id',
        root: 'rows',
        totalProperty: 'results',
        fields: [
            {name: 'name'},
            {name: 'job', mapping: 'occupation'}
        ],
        sortInfo: {field: 'name', direction:'ASC'}, // used by store to set its sortInfo
        foo: 'bar' // custom property
    },
    results: 2,
    rows: [ // an Array
        { 'id': 1, 'name': 'Bill', occupation: 'Gardener' },
        { 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' }
    ]
}

Config Options

Config OptionsDefined By
 idProperty : String
[id] Name of the property within a row object that contains a record identifier value. Defaults to id
JsonReader

Public Properties

PropertyDefined By
 buildExtractors : Object
Abstract method, overridden in Ext.data.JsonReader
DataReader
 meta : Mixed
This JsonReader's metadata as passed to the constructor, or as passed in the last data packet's metaData property.
JsonReader

Public Methods

MethodDefined By

Public Events

This class has no public events.