Fix #5718 - Change the order / layout of tabs. / new master lists
[roojs1] / docs / src / Roo_tree_TreeLoader.js.html
1 <html><head><title>/home/edward/gitlive/roojs1/Roo/tree/TreeLoader.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">/*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * &lt;script type=&quot;text/javascript&quot;&gt;
10  */
11 /**
12  * @class Roo.tree.TreeLoader
13  * @extends Roo.util.Observable
14  * A TreeLoader provides for lazy loading of an {@link Roo.tree.TreeNode}'s child
15  * nodes from a specified URL. The response must be a javascript Array definition
16  * who's elements are node definition objects. eg:
17  * &lt;pre&gt;&lt;code&gt;
18 {  success : true,
19    data :      [
20    
21     { 'id': 1, 'text': 'A folder Node', 'leaf': false },
22     { 'id': 2, 'text': 'A leaf Node', 'leaf': true }
23     ]
24 }
25
26
27 &lt;/code&gt;&lt;/pre&gt;
28  * &lt;br&gt;&lt;br&gt;
29  * The old style respose with just an array is still supported, but not recommended.
30  * &lt;br&gt;&lt;br&gt;
31  *
32  * A server request is sent, and child nodes are loaded only when a node is expanded.
33  * The loading node's id is passed to the server under the parameter name &quot;node&quot; to
34  * enable the server to produce the correct child nodes.
35  * &lt;br&gt;&lt;br&gt;
36  * To pass extra parameters, an event handler may be attached to the &quot;beforeload&quot;
37  * event, and the parameters specified in the TreeLoader's baseParams property:
38  * &lt;pre&gt;&lt;code&gt;
39     myTreeLoader.on(&quot;beforeload&quot;, function(treeLoader, node) {
40         this.baseParams.category = node.attributes.category;
41     }, this);
42     
43 &lt;/code&gt;&lt;/pre&gt;
44  *
45  * This would pass an HTTP parameter called &quot;category&quot; to the server containing
46  * the value of the Node's &quot;category&quot; attribute.
47  * @constructor
48  * Creates a new Treeloader.
49  * @param {Object} config A config object containing config properties.
50  */
51 </span><span class="jsdoc-var">Roo.tree.TreeLoader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">){
52     </span><span class="jsdoc-var">this.baseParams </span><span class="jsdoc-syntax">= {};
53     </span><span class="jsdoc-var">this.requestMethod </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;POST&quot;</span><span class="jsdoc-syntax">;
54     </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
55
56     </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
57
58         </span><span class="jsdoc-comment">/**
59          * @event beforeload
60          * Fires before a network request is made to retrieve the Json text which specifies a node's children.
61          * @param {Object} This TreeLoader object.
62          * @param {Object} node The {@link Roo.tree.TreeNode} object being loaded.
63          * @param {Object} callback The callback function specified in the {@link #load} call.
64          */
65         </span><span class="jsdoc-var">beforeload </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
66         </span><span class="jsdoc-comment">/**
67          * @event load
68          * Fires when the node has been successfuly loaded.
69          * @param {Object} This TreeLoader object.
70          * @param {Object} node The {@link Roo.tree.TreeNode} object being loaded.
71          * @param {Object} response The response object containing the data from the server.
72          */
73         </span><span class="jsdoc-var">load </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
74         </span><span class="jsdoc-comment">/**
75          * @event loadexception
76          * Fires if the network request failed.
77          * @param {Object} This TreeLoader object.
78          * @param {Object} node The {@link Roo.tree.TreeNode} object being loaded.
79          * @param {Object} response The response object containing the data from the server.
80          */
81         </span><span class="jsdoc-var">loadexception </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
82         </span><span class="jsdoc-comment">/**
83          * @event create
84          * Fires before a node is created, enabling you to return custom Node types 
85          * @param {Object} This TreeLoader object.
86          * @param {Object} attr - the data returned from the AJAX call (modify it to suit)
87          */
88         </span><span class="jsdoc-var">create </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
89     </span><span class="jsdoc-syntax">});
90
91     </span><span class="jsdoc-var">Roo.tree.TreeLoader.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
92 };
93
94 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.tree.TreeLoader</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">, {
95     </span><span class="jsdoc-comment">/**
96     * @cfg {String} dataUrl The URL from which to request a Json string which
97     * specifies an array of node definition object representing the child nodes
98     * to be loaded.
99     */
100     /**
101     * @cfg {String} requestMethod either GET or POST
102     * defaults to POST (due to BC)
103     * to be loaded.
104     */
105     /**
106     * @cfg {Object} baseParams (optional) An object containing properties which
107     * specify HTTP parameters to be passed to each request for child nodes.
108     */
109     /**
110     * @cfg {Object} baseAttrs (optional) An object containing attributes to be added to all nodes
111     * created by this loader. If the attributes sent by the server have an attribute in this object,
112     * they take priority.
113     */
114     /**
115     * @cfg {Object} uiProviders (optional) An object containing properties which
116     * 
117     * DEPRECATED - use 'create' event handler to modify attributes - which affect creation.
118     * specify custom {@link Roo.tree.TreeNodeUI} implementations. If the optional
119     * &lt;i&gt;uiProvider&lt;/i&gt; attribute of a returned child node is a string rather
120     * than a reference to a TreeNodeUI implementation, this that string value
121     * is used as a property name in the uiProviders object. You can define the provider named
122     * 'default' , and this will be used for all nodes (if no uiProvider is delivered by the node data)
123     */
124     </span><span class="jsdoc-var">uiProviders </span><span class="jsdoc-syntax">: {},
125
126     </span><span class="jsdoc-comment">/**
127     * @cfg {Boolean} clearOnLoad (optional) Default to true. Remove previously existing
128     * child nodes before loading.
129     */
130     </span><span class="jsdoc-var">clearOnLoad </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
131
132     </span><span class="jsdoc-comment">/**
133     * @cfg {String} root (optional) Default to false. Use this to read data from an object 
134     * property on loading, rather than expecting an array. (eg. more compatible to a standard
135     * Grid query { data : [ .....] }
136     */
137
138     </span><span class="jsdoc-var">root </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
139      </span><span class="jsdoc-comment">/**
140     * @cfg {String} queryParam (optional) 
141     * Name of the query as it will be passed on the querystring (defaults to 'node')
142     * eg. the request will be ?node=[id]
143     */
144
145
146     </span><span class="jsdoc-var">queryParam</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
147
148     </span><span class="jsdoc-comment">/**
149      * Load an {@link Roo.tree.TreeNode} from the URL specified in the constructor.
150      * This is called automatically when a node is expanded, but may be used to reload
151      * a node (or append new children if the {@link #clearOnLoad} option is false.)
152      * @param {Roo.tree.TreeNode} node
153      * @param {Function} callback
154      */
155     </span><span class="jsdoc-var">load </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
156         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.clearOnLoad</span><span class="jsdoc-syntax">){
157             </span><span class="jsdoc-keyword">while</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.firstChild</span><span class="jsdoc-syntax">){
158                 </span><span class="jsdoc-var">node.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.firstChild</span><span class="jsdoc-syntax">);
159             }
160         }
161         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.attributes.children</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// preloaded json children
162             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.attributes.children</span><span class="jsdoc-syntax">;
163             </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">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cs.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
164                 </span><span class="jsdoc-var">node.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.createNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cs</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]));
165             }
166             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">callback </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
167                 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">();
168             }
169         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.dataUrl</span><span class="jsdoc-syntax">){
170             </span><span class="jsdoc-var">this.requestData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">);
171         }
172     },
173
174     </span><span class="jsdoc-var">getParams</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
175         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">buf </span><span class="jsdoc-syntax">= [], </span><span class="jsdoc-var">bp </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.baseParams</span><span class="jsdoc-syntax">;
176         </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">key </span><span class="jsdoc-keyword">in </span><span class="jsdoc-var">bp</span><span class="jsdoc-syntax">){
177             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">bp</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">key</span><span class="jsdoc-syntax">] != </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
178                 </span><span class="jsdoc-var">buf.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">encodeURIComponent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">key</span><span class="jsdoc-syntax">), </span><span class="jsdoc-string">&quot;=&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">encodeURIComponent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">bp</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">key</span><span class="jsdoc-syntax">]), </span><span class="jsdoc-string">&quot;&amp;&quot;</span><span class="jsdoc-syntax">);
179             }
180         }
181         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.queryParam </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'node' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.queryParam</span><span class="jsdoc-syntax">;
182         </span><span class="jsdoc-var">buf.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;=&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">encodeURIComponent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.id</span><span class="jsdoc-syntax">));
183         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">buf.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
184     },
185
186     </span><span class="jsdoc-var">requestData </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
187         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforeload&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
188             </span><span class="jsdoc-var">this.transId </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.Ajax.request</span><span class="jsdoc-syntax">({
189                 </span><span class="jsdoc-var">method</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">this.requestMethod</span><span class="jsdoc-syntax">,
190                 </span><span class="jsdoc-var">url</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.dataUrl</span><span class="jsdoc-syntax">||</span><span class="jsdoc-var">this.url</span><span class="jsdoc-syntax">,
191                 </span><span class="jsdoc-var">success</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.handleResponse</span><span class="jsdoc-syntax">,
192                 </span><span class="jsdoc-var">failure</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.handleFailure</span><span class="jsdoc-syntax">,
193                 </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">,
194                 </span><span class="jsdoc-var">argument</span><span class="jsdoc-syntax">: {</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">},
195                 </span><span class="jsdoc-var">params</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.getParams</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
196             });
197         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
198             </span><span class="jsdoc-comment">// if the load is cancelled, make sure we notify
199             // the node that we are done
200             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">callback </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
201                 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">();
202             }
203         }
204     },
205
206     </span><span class="jsdoc-var">isLoading </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
207         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.transId </span><span class="jsdoc-syntax">? </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
208     },
209
210     </span><span class="jsdoc-var">abort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
211         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.isLoading</span><span class="jsdoc-syntax">()){
212             </span><span class="jsdoc-var">Roo.Ajax.abort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.transId</span><span class="jsdoc-syntax">);
213         }
214     },
215
216     </span><span class="jsdoc-comment">// private
217     </span><span class="jsdoc-var">createNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">)
218     {
219         </span><span class="jsdoc-comment">// apply baseAttrs, nice idea Corey!
220         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.baseAttrs</span><span class="jsdoc-syntax">){
221             </span><span class="jsdoc-var">Roo.applyIf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.baseAttrs</span><span class="jsdoc-syntax">);
222         }
223         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.applyLoader </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
224             </span><span class="jsdoc-var">attr.loader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
225         }
226         </span><span class="jsdoc-comment">// uiProvider = depreciated..
227
228         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr.uiProvider</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string'</span><span class="jsdoc-syntax">){
229            </span><span class="jsdoc-var">attr.uiProvider </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.uiProviders</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">attr.uiProvider</span><span class="jsdoc-syntax">] ||
230                 </span><span class="jsdoc-comment">/**  eval:var:attr */ </span><span class="jsdoc-keyword">eval</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr.uiProvider</span><span class="jsdoc-syntax">);
231         }
232         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.uiProviders</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'default'</span><span class="jsdoc-syntax">]) != </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
233             </span><span class="jsdoc-var">attr.uiProvider </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.uiProviders</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'default'</span><span class="jsdoc-syntax">];
234         }
235
236         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'create'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">);
237
238         </span><span class="jsdoc-var">attr.leaf  </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr.leaf</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">attr.leaf </span><span class="jsdoc-syntax">* 1 : </span><span class="jsdoc-var">attr.leaf</span><span class="jsdoc-syntax">;
239         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr.leaf </span><span class="jsdoc-syntax">?
240                         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.tree.TreeNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">) :
241                         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.tree.AsyncTreeNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">));
242     },
243
244     </span><span class="jsdoc-var">processResponse </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">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">)
245     {
246         </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">;
247         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
248
249             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.decode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">json</span><span class="jsdoc-syntax">);
250
251             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.root </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.success</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-var">undefined</span><span class="jsdoc-syntax">) {
252                 </span><span class="jsdoc-var">this.root </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'data'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// the default behaviour for list like data..
253                 </span><span class="jsdoc-syntax">}
254
255             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.root </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">&amp;&amp;  !</span><span class="jsdoc-var">o.success</span><span class="jsdoc-syntax">) {
256                 </span><span class="jsdoc-comment">// it's a failure condition.
257                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">response.argument</span><span class="jsdoc-syntax">;
258                 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;loadexception&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">a.node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">response</span><span class="jsdoc-syntax">);
259                 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;Load failed - should have a handler really&quot;</span><span class="jsdoc-syntax">);
260                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
261             }
262
263
264
265             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.root </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
266                  </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.root</span><span class="jsdoc-syntax">];
267             }
268
269             </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">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
270                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
271                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">){
272                     </span><span class="jsdoc-var">node.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
273                 }
274             }
275             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">callback </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
276                 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
277             }
278         }</span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
279             </span><span class="jsdoc-var">this.handleFailure</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">response</span><span class="jsdoc-syntax">);
280         }
281     },
282
283     </span><span class="jsdoc-var">handleResponse </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">){
284         </span><span class="jsdoc-var">this.transId </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
285         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">response.argument</span><span class="jsdoc-syntax">;
286         </span><span class="jsdoc-var">this.processResponse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">response</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">a.node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">a.callback</span><span class="jsdoc-syntax">);
287         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;load&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">a.node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">response</span><span class="jsdoc-syntax">);
288     },
289
290     </span><span class="jsdoc-var">handleFailure </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">)
291     {
292         </span><span class="jsdoc-comment">// should handle failure better..
293         </span><span class="jsdoc-var">this.transId </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
294         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">response.argument</span><span class="jsdoc-syntax">;
295         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;loadexception&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">a.node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">response</span><span class="jsdoc-syntax">);
296         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">a.callback </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
297             </span><span class="jsdoc-var">a.callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">a.node</span><span class="jsdoc-syntax">);
298         }
299     }
300 });</span></code></body></html>