DataReader 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 packet based on mappings in a provided Ext.data.Record constructor.
Example code:
var myReader = new Ext.data.JsonReader({
// metadata configuration options:
idProperty: 'id'
root: 'rows',
totalProperty: 'results',
Ext.data.DataReader.messageProperty: "msg" // The element within the response that provides a user-feedback message (optional)
// the fields config option will internally create an Ext.data.Record
// constructor that provides mapping for reading the record data objects
fields: [
// map Record's 'firstname' field to data object's key of same name
{name: 'name'},
// map Record's 'job' field to data object's 'occupation' key
{name: 'job', mapping: 'occupation'}
]
});
This would consume a JSON data object of the form:
{
results: 2000, // Reader's configured totalProperty
rows: [ // Reader's configured root
// record data objects:
{ id: 1, firstname: 'Bill', occupation: 'Gardener' },
{ id: 2, firstname: 'Ben' , occupation: 'Horticulturalist' },
...
]
}
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.
To use this facility 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"
"successProperty": "success",
"fields": [
{"name": "name"},
{"name": "job", "mapping": "occupation"}
],
// used by store to set its sortInfo
"sortInfo":{
"field": "name",
"direction": "ASC"
},
// paging data (if applicable)
"start": 0,
"limit": 2,
// custom property
"foo": "bar"
},
// Reader's configured successProperty
"success": true,
// Reader's configured totalProperty
"results": 2000,
// Reader's configured root
// (this data simulates 2 results per page)
"rows": [ // *Note: this must be an Array
{ "id": 1, "name": "Bill", "occupation": "Gardener" },
{ "id": 2, "name": "Ben", "occupation": "Horticulturalist" }
]
}
The metaData property in the JSON data object should contain:
Config Options | Defined By | |
---|---|---|
fields : Array/Object Either an Array of Field definition objects (which
will be passed to Ext.data.Record.create, or a Record
constructo... Either an Array of Field definition objects (which will be passed to Ext.data.Record.create, or a Record constructor created from Ext.data.Record.create. | DataReader | |
idProperty : String [id] Name of the property within a row object
that contains a record identifier value. Defaults to id | JsonReader | |
messageProperty : String [undefined] Optional name of a property within a server-response that represents a user-feedback message. | DataReader | |
root : String [undefined] Required. The name of the property
which contains the Array of row objects. Defaults to undefined.
An e... [undefined] Required. The name of the property
which contains the Array of row objects. Defaults to undefined.
An exception will be thrown if the root property is undefined. The data
packet value for this property should be an empty array to clear the data
or show no data. | JsonReader | |
successProperty : String [success] Name of the property from which to
retrieve the success attribute. Defaults to success. See
Ext.data.DataP... [success] Name of the property from which to
retrieve the success attribute. Defaults to success. See
Ext.data.DataProxy.exception
for additional information. | JsonReader | |
totalProperty : String [total] Name of the property from which to
retrieve the total number of records in the dataset. This is only needed
i... [total] Name of the property from which to
retrieve the total number of records in the dataset. This is only needed
if the whole dataset is not passed in one go, but is being paged from
the remote server. Defaults to total. | JsonReader |
Property | Defined By | |
---|---|---|
buildExtractors : Object Abstract method, overridden in DataReader extensions such as Ext.data.JsonReader and Ext.data.XmlReader | DataReader | |
extractData : Object Abstract method overridden in DataReader extensions such as Ext.data.JsonReader and Ext.data.XmlReader | DataReader | |
extractValues : Object Abstract method overridden in DataReader extensions such as Ext.data.JsonReader and Ext.data.XmlReader | DataReader | |
getId : Object Abstract method created in extension's buildExtractors impl. | DataReader | |
getMessage : Object Abstract method created in extension's buildExtractors impl. | DataReader | |
getRoot : Object Abstract method created in extension's buildExtractors impl. | DataReader | |
getSuccess : Object Abstract method created in extension's buildExtractors impl. | DataReader | |
getTotal : Object Abstract method created in extension's buildExtractors impl. | DataReader | |
jsonData : Object After any data loads, the raw JSON data is available for further custom processing. If no data is
loaded or there is... After any data loads, the raw JSON data is available for further custom processing. If no data is
loaded or there is a load exception this property will be undefined. | JsonReader | |
meta : Mixed This JsonReader's metadata as passed to the constructor, or as passed in
the last data packet's metaData property. | JsonReader |
Method | Defined By | |
---|---|---|
JsonReader( Object meta , Array/Object recordType )
Create a new JsonReader Create a new JsonReader Parameters:
| JsonReader | |
isData( Object data )
:
BooleanReturns true if the supplied data-hash looks and quacks like data. Checks to see if it has a key
corresponding to i... Returns true if the supplied data-hash looks and quacks like data. Checks to see if it has a key
corresponding to idProperty defined in your DataReader config containing non-empty pk. Parameters:
| DataReader | |
read( Object response )
:
ObjectThis method is only used by a DataProxy which has retrieved data from a remote server. This method is only used by a DataProxy which has retrieved data from a remote server. Parameters:
| JsonReader | |
readRecords( Object o )
:
ObjectCreate a data block containing Ext.data.Records from a JSON object. Create a data block containing Ext.data.Records from a JSON object. Parameters:
| JsonReader | |
readResponse( String action , Object response )
:
voidDecode a json response from server. Decode a json response from server. Parameters:
| JsonReader | |
realize( Record/Record[] record , Object/Object[] data )
:
voidUsed for un-phantoming a record after a successful database insert. Sets the records pk along with new data from ser... Used for un-phantoming a record after a successful database insert. Sets the records pk along with new data from server.
You must return at least the database pk using the idProperty defined in your DataReader configuration. The incoming
data from server will be merged with the data in the local record.
In addition, you must return record-data from the server in the same order received.
Will perform a commit as well, un-marking dirty-fields. Store's "update" event will be suppressed. Parameters:
| DataReader | |
update( Record/Record[] rs , Object/Object[] data )
:
voidUsed for updating a non-phantom or "real" record's data with fresh data from server after remote-save.
If returning ... Used for updating a non-phantom or "real" record's data with fresh data from server after remote-save.
If returning data from multiple-records after a batch-update, you must return record-data from the server in
the same order received. Will perform a commit as well, un-marking dirty-fields. Store's "update" event will be
suppressed as the record receives fresh new data-hash Parameters:
| DataReader |