Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / docs / api / Ext.data.reader.Reader.html
diff --git a/docs/api/Ext.data.reader.Reader.html b/docs/api/Ext.data.reader.Reader.html
new file mode 100644 (file)
index 0000000..6938ba5
--- /dev/null
@@ -0,0 +1,238 @@
+<!DOCTYPE html><html><head><title>Ext.data.reader.Reader | Ext JS 4.0 Documentation</title><script type="text/javascript" src="../ext-all.js"></script><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../scrollbars.css" type="text/css"><link rel="stylesheet" href="../docs.css" type="text/css"><link id="styleCss" rel="stylesheet" href="../style.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script><link rel="stylesheet" href="../prettify.css" type="text/css"><!-- link(rel: 'stylesheet', href: req.baseURL + '/css/ext4.css', type: 'text/css')--><link rel="shortcut icon" type="image/ico" href="../favicon.ico"><!--[if IE]>
+<style type="text/css">.head-band { display: none; }
+.header { border: 0; top: 0; left: 0px; background: url(../header.gif) repeat-x; }
+.doc-tab .members .member a.more { background-color: #efefef; }
+</style><link rel="stylesheet" href="/new/css/ie.css" type="text/css"><![endif]-->
+</head><body id="ext-body" class="iScroll"><div id="notice" class="notice">For up to date documentation and features, visit 
+<a href="http://docs.sencha.com/ext-js/4-0">http://docs.sencha.com/ext-js/4-0</a></div><div class="wrapper"><div class="head-band"></div><div class="header"><h2><a href="../index.html">Sencha Documentation</a></h2></div><div id="search"><form><input type="text" placeholder="Search" id="search-field" autocomplete="off" name="q"></form><div id="search-box"></div></div><div id="treePanel"></div><div id="container"><script type="text/javascript">
+
+    req = {
+        liveURL: '.',
+        standAloneMode: true,
+        origDocClass: 'Ext.data.reader.Reader',
+        docClass: 'Ext.data.reader.Reader',
+        docReq: 'Ext.data.reader.Reader',
+        version: '4.0',
+        baseURL: '.',
+        baseDocURL: '.',
+        baseProdURL: '.'
+    };
+
+    clsInfo = {};
+
+
+
+</script>
+
+<script type="text/javascript" src="../search.js"></script>
+<!--script type="text/javascript" src="/new/javascripts/app/examples.js"></script-->
+<script type="text/javascript" src="../class_tree.js"></script>
+<script type="text/javascript" src="../class_doc.js"></script>
+<script type="text/javascript">
+    req.source = 'Reader.html#Ext-data.reader.Reader';
+    clsInfo = {"methods":["Reader","getResponseData","read","readRecords"],"cfgs":["idProperty","implicitIncludes","messageProperty","root","successProperty","totalProperty"],"properties":["rawData"],"events":[],"subclasses":["Ext.data.reader.Json","Ext.data.reader.Xml"]};
+    Ext.onReady(function() {
+        Ext.create('Docs.classPanel');
+    });
+</script><div id="top-block" class="top-block"><h1 id="clsTitle" class="cls"><a href="../source/Reader.html#Ext-data.reader.Reader" target="_blank">Ext.data.reader.Reader</a></h1></div><div id="docContent"><div id="doc-overview-content"><div class="lft"><p>Readers are used to interpret data to be loaded into a <a href="Ext.data.Model.html" rel="Ext.data.Model" class="docClass">Model</a> instance or a <a href="Ext.data.Store.html" rel="Ext.data.Store" class="docClass">Store</a>
+- usually in response to an AJAX request. This is normally handled transparently by passing some configuration to either the 
+<a href="Ext.data.Model.html" rel="Ext.data.Model" class="docClass">Model</a> or the <a href="Ext.data.Store.html" rel="Ext.data.Store" class="docClass">Store</a> in question - see their documentation for further details.</p>
+
+
+
+
+<p><u>Loading Nested Data</u></p>
+
+
+
+
+<p>Readers have the ability to automatically load deeply-nested data objects based on the <a href="Ext.data.Association.html" rel="Ext.data.Association" class="docClass">associations</a>
+configured on each Model. Below is an example demonstrating the flexibility of these associations in a fictional CRM system which
+manages a User, their Orders, OrderItems and Products. First we'll define the models:
+
+<pre class="prettyprint"><code>Ext.define("User", {
+    extend: 'Ext.data.Model',
+    fields: [
+        'id', 'name'
+    ],
+
+    hasMany: {model: 'Order', name: 'orders'},
+
+    proxy: {
+        type: 'rest',
+        url : 'users.json',
+        reader: {
+            type: 'json',
+            root: 'users'
+        }
+    }
+});
+
+Ext.define("Order", {
+    extend: 'Ext.data.Model',
+    fields: [
+        'id', 'total'
+    ],
+
+    hasMany  : {model: 'OrderItem', name: 'orderItems', associationKey: 'order_items'},
+    belongsTo: 'User'
+});
+
+Ext.define("OrderItem", {
+    extend: 'Ext.data.Model',
+    fields: [
+        'id', 'price', 'quantity', 'order_id', 'product_id'
+    ],
+
+    belongsTo: ['Order', {model: 'Product', associationKey: 'product'}]
+});
+
+Ext.define("Product", {
+    extend: 'Ext.data.Model',
+    fields: [
+        'id', 'name'
+    ],
+
+    hasMany: 'OrderItem'
+});
+</code></pre>
+
+<p>This may be a lot to take in - basically a User has many Orders, each of which is composed of several OrderItems. Finally,
+each OrderItem has a single Product. This allows us to consume data like this:</p>
+
+<pre class="prettyprint"><code>{
+    "users": [
+        {
+            "id": 123,
+            "name": "Ed",
+            "orders": [
+                {
+                    "id": 50,
+                    "total": 100,
+                    "order_items": [
+                        {
+                            "id"      : 20,
+                            "price"   : 40,
+                            "quantity": 2,
+                            "product" : {
+                                "id": 1000,
+                                "name": "MacBook Pro"
+                            }
+                        },
+                        {
+                            "id"      : 21,
+                            "price"   : 20,
+                            "quantity": 3,
+                            "product" : {
+                                "id": 1001,
+                                "name": "iPhone"
+                            }
+                        }
+                    ]
+                }
+            ]
+        }
+    ]
+}
+</code></pre>
+
+<p>The JSON response is deeply nested - it returns all Users (in this case just 1 for simplicity's sake), all of the Orders
+for each User (again just 1 in this case), all of the OrderItems for each Order (2 order items in this case), and finally
+the Product associated with each OrderItem. Now we can read the data and use it as follows:
+
+<pre class="prettyprint"><code>var store = new Ext.data.Store({
+    model: "User"
+});
+
+store.load({
+    callback: function() {
+        //the user that was loaded
+        var user = store.first();
+
+        console.log("Orders for " + user.get('name') + ":")
+
+        //iterate over the Orders for each User
+        user.orders().each(function(order) {
+            console.log("Order ID: " + order.getId() + ", which contains items:");
+
+            //iterate over the OrderItems for each Order
+            order.orderItems().each(function(orderItem) {
+                //we know that the Product data is already loaded, so we can use the synchronous getProduct
+                //usually, we would use the asynchronous version (see <a href="Ext.data.BelongsToAssociation.html" rel="Ext.data.BelongsToAssociation" class="docClass">Ext.data.BelongsToAssociation</a>)
+                var product = orderItem.getProduct();
+
+                console.log(orderItem.get('quantity') + ' orders of ' + product.get('name'));
+            });
+        });
+    }
+});
+</code></pre>
+
+<p>Running the code above results in the following:</p>
+
+<pre class="prettyprint"><code>Orders for Ed:
+Order ID: 50, which contains items:
+2 orders of MacBook Pro
+3 orders of iPhone
+</code></pre>
+
+<div class="members"><div class="m-cfgs"><div class="definedBy">Defined By</div><a name="configs"></a><h3 class="cfg p">Config Options</h3><h4 class="cfgGroup">Other Configs</h4><div id="config-idProperty" class="member f ni"><a href="Ext.data.reader.Reader.html#config-idProperty" rel="config-idProperty" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-idProperty" class="viewSource">view source</a></div><a name="idProperty"></a><a name="config-idProperty"></a><a href="Ext.data.reader.Reader.html#" rel="config-idProperty" class="cls expand">idProperty</a><span> : String</span></div><div class="description"><div class="short">Name of the property within a row object
+that contains a record identifier value.  Defaults to The id of the model.
+I...</div><div class="long"><p>Name of the property within a row object
+that contains a record identifier value.  Defaults to <tt>The id of the model</tt>.
+If an idProperty is explicitly specified it will override that of the one specified
+on the model</p>
+</div></div></div><div id="config-implicitIncludes" class="member ni"><a href="Ext.data.reader.Reader.html#config-implicitIncludes" rel="config-implicitIncludes" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-implicitIncludes" class="viewSource">view source</a></div><a name="implicitIncludes"></a><a name="config-implicitIncludes"></a><a href="Ext.data.reader.Reader.html#" rel="config-implicitIncludes" class="cls expand">implicitIncludes</a><span> : Boolean</span></div><div class="description"><div class="short">True to automatically parse models nested within other models in a response
+object. See the Ext.data.reader.Reader in...</div><div class="long"><p>True to automatically parse models nested within other models in a response
+object. See the <a href="Ext.data.reader.Reader.html" rel="Ext.data.reader.Reader" class="docClass">Ext.data.reader.Reader</a> intro docs for full explanation. Defaults to true.</p>
+</div></div></div><div id="config-messageProperty" class="member ni"><a href="Ext.data.reader.Reader.html#config-messageProperty" rel="config-messageProperty" class="expand more"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-messageProperty" class="viewSource">view source</a></div><a name="messageProperty"></a><a name="config-messageProperty"></a><a href="Ext.data.reader.Reader.html#" rel="config-messageProperty" class="cls expand">messageProperty</a><span> : String</span></div><div class="description"><div class="short"><p>The name of the property which contains a response message.
+This property is optional.</p>
+</div><div class="long"><p>The name of the property which contains a response message.
+This property is optional.</p>
+</div></div></div><div id="config-root" class="member ni"><a href="Ext.data.reader.Reader.html#config-root" rel="config-root" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-root" class="viewSource">view source</a></div><a name="root"></a><a name="config-root"></a><a href="Ext.data.reader.Reader.html#" rel="config-root" class="cls expand">root</a><span> : String</span></div><div class="description"><div class="short">Required.  The name of the property
+which contains the Array of row objects.  Defaults to undefined.
+An exception wil...</div><div class="long"><p><b>Required</b>.  The name of the property
+which contains the Array of row objects.  Defaults to <tt>undefined</tt>.
+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.</p>
+</div></div></div><div id="config-successProperty" class="member ni"><a href="Ext.data.reader.Reader.html#config-successProperty" rel="config-successProperty" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-successProperty" class="viewSource">view source</a></div><a name="successProperty"></a><a name="config-successProperty"></a><a href="Ext.data.reader.Reader.html#" rel="config-successProperty" class="cls expand">successProperty</a><span> : String</span></div><div class="description"><div class="short">Name of the property from which to
+retrieve the success attribute. Defaults to success.  See
+Ext.data.proxy.Proxy.exc...</div><div class="long"><p>Name of the property from which to
+retrieve the success attribute. Defaults to <tt>success</tt>.  See
+<a href="Ext.data.proxy.Proxy.html" rel="Ext.data.proxy.Proxy" class="docClass">Ext.data.proxy.Proxy</a>.<a href="Ext.data.proxy.Proxy.html#exception" rel="Ext.data.proxy.Proxy#exception" class="docClass">exception</a>
+for additional information.</p>
+</div></div></div><div id="config-totalProperty" class="member ni"><a href="Ext.data.reader.Reader.html#config-totalProperty" rel="config-totalProperty" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-totalProperty" class="viewSource">view source</a></div><a name="totalProperty"></a><a name="config-totalProperty"></a><a href="Ext.data.reader.Reader.html#" rel="config-totalProperty" class="cls expand">totalProperty</a><span> : String</span></div><div class="description"><div class="short">Name of the property from which to
+retrieve the total number of records in the dataset. This is only needed
+if the wh...</div><div class="long"><p>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 <tt>total</tt>.</p>
+</div></div></div></div><div class="m-properties"><a name="properties"></a><div class="definedBy">Defined By</div><h3 class="prp p">Properties</h3><div id="property-rawData" class="member f ni"><a href="Ext.data.reader.Reader.html#property-rawData" rel="property-rawData" class="expand more"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-property-rawData" class="viewSource">view source</a></div><a name="rawData"></a><a name="property-rawData"></a><a href="Ext.data.reader.Reader.html#" rel="property-rawData" class="cls expand">rawData</a><span> : Mixed</span></div><div class="description"><div class="short"><p>The raw data object that was last passed to readRecords. Stored for further processing if needed</p>
+</div><div class="long"><p>The raw data object that was last passed to readRecords. Stored for further processing if needed</p>
+</div></div></div></div><div class="m-methods"><a name="methods"></a><div class="definedBy">Defined By</div><h3 class="mth p">Methods</h3><div id="method-Reader" class="member f ni"><a href="Ext.data.reader.Reader.html#method-Reader" rel="method-Reader" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-method-constructor" class="viewSource">view source</a></div><a name="Reader"></a><a name="method-Reader"></a><a href="Ext.data.reader.Reader.html#" rel="method-Reader" class="cls expand">Reader</a>(
+<span class="pre">Object config</span>)
+ : void</div><div class="description"><div class="short"><p>&nbsp;</p></div><div class="long">
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">config</span> : Object<div class="sub-desc"><p>Optional config object</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">void</span>&nbsp; &nbsp;
+</li></ul></div></div></div><div id="method-getResponseData" class="member ni"><a href="Ext.data.reader.Reader.html#method-getResponseData" rel="method-getResponseData" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-method-getResponseData" class="viewSource">view source</a></div><a name="getResponseData"></a><a name="method-getResponseData"></a><a href="Ext.data.reader.Reader.html#" rel="method-getResponseData" class="cls expand">getResponseData</a>(
+<span class="pre">Object response</span>)
+ : Object</div><div class="description"><div class="short">Takes a raw response object (as passed to this.read) and returns the useful data segment of it. This must be implemen...</div><div class="long"><p>Takes a raw response object (as passed to this.read) and returns the useful data segment of it. This must be implemented by each subclass</p>
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">response</span> : Object<div class="sub-desc"><p>The responce object</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">Object</span>&nbsp; &nbsp;<p>The useful data from the response</p>
+</li></ul></div></div></div><div id="method-read" class="member ni"><a href="Ext.data.reader.Reader.html#method-read" rel="method-read" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-method-read" class="viewSource">view source</a></div><a name="read"></a><a name="method-read"></a><a href="Ext.data.reader.Reader.html#" rel="method-read" class="cls expand">read</a>(
+<span class="pre">Object response</span>)
+ : Ext.data.ResultSet</div><div class="description"><div class="short">Reads the given response object. This method normalizes the different types of response object that may be passed
+to ...</div><div class="long"><p>Reads the given response object. This method normalizes the different types of response object that may be passed
+to it, before handing off the reading of records to the <a href="Ext.data.reader.Reader.html#readRecords" rel="Ext.data.reader.Reader#readRecords" class="docClass">readRecords</a> function.</p>
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">response</span> : Object<div class="sub-desc"><p>The response object. This may be either an XMLHttpRequest object or a plain JS object</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">Ext.data.ResultSet</span>&nbsp; &nbsp;<p>The parsed ResultSet object</p>
+</li></ul></div></div></div><div id="method-readRecords" class="member ni"><a href="Ext.data.reader.Reader.html#method-readRecords" rel="method-readRecords" class="expand more ar"><span>&nbsp;</span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-method-readRecords" class="viewSource">view source</a></div><a name="readRecords"></a><a name="method-readRecords"></a><a href="Ext.data.reader.Reader.html#" rel="method-readRecords" class="cls expand">readRecords</a>(
+<span class="pre">Mixed data</span>)
+ : Ext.data.ResultSet</div><div class="description"><div class="short">Abstracts common functionality used by all Reader subclasses. Each subclass is expected to call
+this function before ...</div><div class="long"><p>Abstracts common functionality used by all Reader subclasses. Each subclass is expected to call
+this function before running its own logic and returning the <a href="Ext.data.ResultSet.html" rel="Ext.data.ResultSet" class="docClass">Ext.data.ResultSet</a> instance. For most
+Readers additional processing should not be needed.</p>
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">data</span> : Mixed<div class="sub-desc"><p>The raw data object</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">Ext.data.ResultSet</span>&nbsp; &nbsp;<p>A ResultSet object</p>
+</li></ul></div></div></div></div></div></div></div><div id="pageContent"></div></div></div></div></body></html>
\ No newline at end of file