1 <html><head><title>Roo/data/JsonReader.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
13 * @class Roo.data.JsonReader
14 * @extends Roo.data.DataReader
15 * Data reader class to create an Array of Roo.data.Record objects from a JSON response
16 * based on mappings in a provided Roo.data.Record constructor.
18 * The default behaviour of a store is to send ?_requestMeta=1, unless the class has recieved 'metaData' property
19 * in the reply previously.
23 * <pre><code>
24 var RecordDef = Roo.data.Record.create([
25 {name: 'name', mapping: 'name'}, // "mapping" property not needed if it's the same as "name"
26 {name: 'occupation'} // This field will use "occupation" as the mapping.
28 var myReader = new Roo.data.JsonReader({
29 totalProperty: "results", // The property which contains the total dataset size (optional)
30 root: "rows", // The property which contains an Array of row objects
31 id: "id" // The property within each row object that provides an ID for the record (optional)
33 </code></pre>
35 * This would consume a JSON file like this:
36 * <pre><code>
37 { 'results': 2, 'rows': [
38 { 'id': 1, 'name': 'Bill', occupation: 'Gardener' },
39 { 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' } ]
41 </code></pre>
42 * @cfg {String} totalProperty Name of the property from which to retrieve the total number of records
43 * in the dataset. This is only needed if the whole dataset is not passed in one go, but is being
44 * paged from the remote server.
45 * @cfg {String} successProperty Name of the property from which to retrieve the success attribute used by forms.
46 * @cfg {String} root name of the property which contains the Array of row objects.
47 * @cfg {String} id Name of the property within a row object that contains a record identifier value.
48 * @cfg {Array} fields Array of field definition objects
50 * Create a new JsonReader
51 * @param {Object} meta Metadata configuration options
52 * @param {Object} recordType Either an Array of field definition objects,
53 * or an {@link Roo.data.Record} object created using {@link Roo.data.Record#create}.
55 </span><span class="jsdoc-var">Roo.data.JsonReader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">meta</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">recordType</span><span class="jsdoc-syntax">){
57 </span><span class="jsdoc-var">meta </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">meta </span><span class="jsdoc-syntax">|| {};
58 </span><span class="jsdoc-comment">// set some defaults:
59 </span><span class="jsdoc-var">Roo.applyIf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">meta</span><span class="jsdoc-syntax">, {
60 </span><span class="jsdoc-var">totalProperty</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'total'</span><span class="jsdoc-syntax">,
61 </span><span class="jsdoc-var">successProperty </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'success'</span><span class="jsdoc-syntax">,
62 </span><span class="jsdoc-var">root </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'data'</span><span class="jsdoc-syntax">,
63 </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'id'
64 </span><span class="jsdoc-syntax">});
66 </span><span class="jsdoc-var">Roo.data.JsonReader.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">meta</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">recordType</span><span class="jsdoc-syntax">||</span><span class="jsdoc-var">meta.fields</span><span class="jsdoc-syntax">);
68 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.data.JsonReader</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data.DataReader</span><span class="jsdoc-syntax">, {
70 </span><span class="jsdoc-var">readerType </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Json'</span><span class="jsdoc-syntax">,
72 </span><span class="jsdoc-comment">/**
73 * @prop {Boolean} metaFromRemote - if the meta data was loaded from the remote source.
74 * Used by Store query builder to append _requestMeta to params.
77 </span><span class="jsdoc-var">metaFromRemote </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
78 </span><span class="jsdoc-comment">/**
79 * This method is only used by a DataProxy which has retrieved data from a remote server.
80 * @param {Object} response The XHR object which contains the JSON data in its responseText.
81 * @return {Object} data A data block which is used by an Roo.data.Store object as
82 * a cache of Roo.data.Records.
84 </span><span class="jsdoc-var">read </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">response</span><span class="jsdoc-syntax">){
85 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">json </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">response.responseText</span><span class="jsdoc-syntax">;
87 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-comment">/* eval:var:o */ </span><span class="jsdoc-keyword">eval</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"("</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">json</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">")"</span><span class="jsdoc-syntax">);
88 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">) {
89 </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-syntax">{</span><span class="jsdoc-var">message</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"JsonReader.read: Json object not found"</span><span class="jsdoc-syntax">};
92 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.metaData</span><span class="jsdoc-syntax">){
94 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.ef</span><span class="jsdoc-syntax">;
95 </span><span class="jsdoc-var">this.metaFromRemote </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
96 </span><span class="jsdoc-var">this.meta </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o.metaData</span><span class="jsdoc-syntax">;
97 </span><span class="jsdoc-var">this.recordType </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.data.Record.create</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.metaData.fields</span><span class="jsdoc-syntax">);
98 </span><span class="jsdoc-var">this.onMetaChange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.meta</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.recordType</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
100 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.readRecords</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
103 </span><span class="jsdoc-comment">// private function a store will implement
104 </span><span class="jsdoc-var">onMetaChange </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">meta</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">recordType</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
108 </span><span class="jsdoc-comment">/**
111 </span><span class="jsdoc-var">simpleAccess</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">subsc</span><span class="jsdoc-syntax">) {
112 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">subsc</span><span class="jsdoc-syntax">];
115 </span><span class="jsdoc-comment">/**
118 </span><span class="jsdoc-var">getJsonAccessor</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
119 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">re </span><span class="jsdoc-syntax">= /[\[\.]/;
120 </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">expr</span><span class="jsdoc-syntax">) {
121 </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
122 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">re.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">expr</span><span class="jsdoc-syntax">))
123 ? </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"obj"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">"return obj." </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">expr</span><span class="jsdoc-syntax">)
124 : </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">){
125 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">expr</span><span class="jsdoc-syntax">];
127 } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){}
128 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.emptyFn</span><span class="jsdoc-syntax">;
132 </span><span class="jsdoc-comment">/**
133 * Create a data block containing Roo.data.Records from an XML document.
134 * @param {Object} o An object which contains an Array of row objects in the property specified
135 * in the config as 'root, and optionally a property, specified in the config as 'totalProperty'
136 * which contains the total size of the dataset.
137 * @return {Object} data A data block which is used by an Roo.data.Store object as
138 * a cache of Roo.data.Records.
140 </span><span class="jsdoc-var">readRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
141 </span><span class="jsdoc-comment">/**
142 * After any data loads, the raw JSON data is available for further custom processing.
145 </span><span class="jsdoc-var">this.o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
146 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.meta</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Record </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.recordType</span><span class="jsdoc-syntax">,
147 </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Record </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Record.prototype.fields </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fi </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">f.items </span><span class="jsdoc-syntax">: [], </span><span class="jsdoc-var">fl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">f.length </span><span class="jsdoc-syntax">: 0;
149 </span><span class="jsdoc-comment">// Generate extraction functions for the totalProperty, the root, the id, and for each field
150 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.ef</span><span class="jsdoc-syntax">) {
151 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.totalProperty</span><span class="jsdoc-syntax">) {
152 </span><span class="jsdoc-var">this.getTotal </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getJsonAccessor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.totalProperty</span><span class="jsdoc-syntax">);
154 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.successProperty</span><span class="jsdoc-syntax">) {
155 </span><span class="jsdoc-var">this.getSuccess </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getJsonAccessor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.successProperty</span><span class="jsdoc-syntax">);
157 </span><span class="jsdoc-var">this.getRoot </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">s.root </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.getJsonAccessor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.root</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">){</span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">;};
158 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.id</span><span class="jsdoc-syntax">) {
159 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getJsonAccessor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.id</span><span class="jsdoc-syntax">);
160 </span><span class="jsdoc-var">this.getId </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rec</span><span class="jsdoc-syntax">) {
161 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rec</span><span class="jsdoc-syntax">);
162 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-var">undefined </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">) ? </span><span class="jsdoc-keyword">null </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">;
164 } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
165 </span><span class="jsdoc-var">this.getId </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){</span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;};
167 </span><span class="jsdoc-var">this.ef </span><span class="jsdoc-syntax">= [];
168 </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">jj </span><span class="jsdoc-syntax">= 0; </span><span class="jsdoc-var">jj </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">fl</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">jj</span><span class="jsdoc-syntax">++){
169 </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">fi</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">jj</span><span class="jsdoc-syntax">];
170 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">map </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">f.mapping </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-var">undefined </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">f.mapping </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">) ? </span><span class="jsdoc-var">f.mapping </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">;
171 </span><span class="jsdoc-var">this.ef</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">jj</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">this.getJsonAccessor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">map</span><span class="jsdoc-syntax">);
175 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">root </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getRoot</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">root.length</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">totalRecords </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">success </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
176 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.totalProperty</span><span class="jsdoc-syntax">){
177 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">vt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">parseInt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getTotal</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">), 10);
178 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">isNaN</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">vt</span><span class="jsdoc-syntax">)){
179 </span><span class="jsdoc-var">totalRecords </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">vt</span><span class="jsdoc-syntax">;
182 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.successProperty</span><span class="jsdoc-syntax">){
183 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">vs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getSuccess</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
184 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">vs </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">vs </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'false'</span><span class="jsdoc-syntax">){
185 </span><span class="jsdoc-var">success </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
188 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">records </span><span class="jsdoc-syntax">= [];
189 </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
190 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">root</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
191 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">values </span><span class="jsdoc-syntax">= {};
192 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getId</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
193 </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">j </span><span class="jsdoc-syntax">= 0; </span><span class="jsdoc-var">j </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">fl</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">j</span><span class="jsdoc-syntax">++){
194 </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">fi</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">j</span><span class="jsdoc-syntax">];
195 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.ef</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">j</span><span class="jsdoc-syntax">](</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
196 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">f.convert</span><span class="jsdoc-syntax">) {
197 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'missing convert for ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">);
198 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
199 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
201 </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">f.convert</span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-var">undefined</span><span class="jsdoc-syntax">) ? </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">f.defaultValue</span><span class="jsdoc-syntax">);
203 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">Record</span><span class="jsdoc-syntax">) {
204 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{
205 </span><span class="jsdoc-var">raw </span><span class="jsdoc-syntax">: { </span><span class="jsdoc-var">errorMsg </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"JSON Reader Error: fields or metadata not available to create Record" </span><span class="jsdoc-syntax">},
206 </span><span class="jsdoc-var">success </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
207 </span><span class="jsdoc-var">records </span><span class="jsdoc-syntax">: [],
208 </span><span class="jsdoc-var">totalRecords </span><span class="jsdoc-syntax">: 0
211 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">record </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Record</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">);
212 </span><span class="jsdoc-var">record.json </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">;
213 </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">;
215 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{
216 </span><span class="jsdoc-var">raw </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">,
217 </span><span class="jsdoc-var">success </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">success</span><span class="jsdoc-syntax">,
218 </span><span class="jsdoc-var">records </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">,
219 </span><span class="jsdoc-var">totalRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">totalRecords
220 </span><span class="jsdoc-syntax">};
222 </span><span class="jsdoc-comment">// used when loading children.. @see loadDataFromChildren
223 </span><span class="jsdoc-var">toLoadData</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rec</span><span class="jsdoc-syntax">)
225 </span><span class="jsdoc-comment">// expect rec just to be an array.. eg [a,b,c, [...] << cn ]
226 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rec.data.cn</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">? [] : </span><span class="jsdoc-var">rec.data.cn</span><span class="jsdoc-syntax">;
227 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{ </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">total </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">data.length </span><span class="jsdoc-syntax">};
230 });</span></code></body></html>