3c232e506961760cc1fa7241d5c8f03895bb74ee
[roojs1] / docs / symbols / src / Roo_JsonView.js.html
1 <html><head><title>../roojs1/Roo/JsonView.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 /**
13  * @class Roo.JsonView
14  * @extends Roo.View
15  * Shortcut class to create a JSON + {@link Roo.UpdateManager} template view. Usage:
16 &lt;pre&gt;&lt;code&gt;
17 var view = new Roo.JsonView({
18     container: &quot;my-element&quot;,
19     tpl: '&amp;lt;div id=&quot;{id}&quot;&amp;gt;{foo} - {bar}&amp;lt;/div&amp;gt;', // auto create template
20     multiSelect: true, 
21     jsonRoot: &quot;data&quot; 
22 });
23
24 // listen for node click?
25 view.on(&quot;click&quot;, function(vw, index, node, e){
26     alert('Node &quot;' + node.id + '&quot; at index: ' + index + &quot; was clicked.&quot;);
27 });
28
29 // direct load of JSON data
30 view.load(&quot;foobar.php&quot;);
31
32 // Example from my blog list
33 var tpl = new Roo.Template(
34     '&amp;lt;div class=&quot;entry&quot;&amp;gt;' +
35     '&amp;lt;a class=&quot;entry-title&quot; href=&quot;{link}&quot;&amp;gt;{title}&amp;lt;/a&amp;gt;' +
36     &quot;&amp;lt;h4&amp;gt;{date} by {author} | {comments} Comments&amp;lt;/h4&amp;gt;{description}&quot; +
37     &quot;&amp;lt;/div&amp;gt;&amp;lt;hr /&amp;gt;&quot;
38 );
39
40 var moreView = new Roo.JsonView({
41     container :  &quot;entry-list&quot;, 
42     template : tpl,
43     jsonRoot: &quot;posts&quot;
44 });
45 moreView.on(&quot;beforerender&quot;, this.sortEntries, this);
46 moreView.load({
47     url: &quot;/blog/get-posts.php&quot;,
48     params: &quot;allposts=true&quot;,
49     text: &quot;Loading Blog Entries...&quot;
50 });
51 &lt;/code&gt;&lt;/pre&gt;
52
53 * Note: old code is supported with arguments : (container, template, config)
54
55
56  * @constructor
57  * Create a new JsonView
58  * 
59  * @param {Object} config The config object
60  * 
61  */
62 </span><span class="jsdoc-var">Roo.JsonView </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">, </span><span class="jsdoc-var">depreciated_tpl</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">depreciated_config</span><span class="jsdoc-syntax">){
63     
64     
65     </span><span class="jsdoc-var">Roo.JsonView.superclass.constructor.call</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">, </span><span class="jsdoc-var">depreciated_tpl</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">depreciated_config</span><span class="jsdoc-syntax">);
66
67     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">um </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.getUpdateManager</span><span class="jsdoc-syntax">();
68     </span><span class="jsdoc-var">um.setRenderer</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
69     </span><span class="jsdoc-var">um.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;update&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onLoad</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
70     </span><span class="jsdoc-var">um.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;failure&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onLoadException</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
71
72     </span><span class="jsdoc-comment">/**
73      * @event beforerender
74      * Fires before rendering of the downloaded JSON data.
75      * @param {Roo.JsonView} this
76      * @param {Object} data The JSON data loaded
77      */
78     /**
79      * @event load
80      * Fires when data is loaded.
81      * @param {Roo.JsonView} this
82      * @param {Object} data The JSON data loaded
83      * @param {Object} response The raw Connect response object
84      */
85     /**
86      * @event loadexception
87      * Fires when loading fails.
88      * @param {Roo.JsonView} this
89      * @param {Object} response The raw Connect response object
90      */
91     </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
92         </span><span class="jsdoc-string">'beforerender' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
93         </span><span class="jsdoc-string">'load' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
94         </span><span class="jsdoc-string">'loadexception' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
95     </span><span class="jsdoc-syntax">});
96 };
97 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.JsonView</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.View</span><span class="jsdoc-syntax">, {
98     </span><span class="jsdoc-comment">/**
99      * @type {String} The root property in the loaded JSON object that contains the data
100      */
101     </span><span class="jsdoc-var">jsonRoot </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">,
102
103     </span><span class="jsdoc-comment">/**
104      * Refreshes the view.
105      */
106     </span><span class="jsdoc-var">refresh </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
107         </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
108         </span><span class="jsdoc-var">this.el.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
109         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= [];
110         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">;
111         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">o.length </span><span class="jsdoc-syntax">&gt; 0){
112             </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">++){
113                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.prepareData</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">], </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
114                 </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">html.length</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">this.tpl.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">);
115             }
116         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
117             </span><span class="jsdoc-var">html.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.emptyText</span><span class="jsdoc-syntax">);
118         }
119         </span><span class="jsdoc-var">this.el.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">));
120         </span><span class="jsdoc-var">this.nodes </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.dom.childNodes</span><span class="jsdoc-syntax">;
121         </span><span class="jsdoc-var">this.updateIndexes</span><span class="jsdoc-syntax">(0);
122     },
123
124     </span><span class="jsdoc-comment">/**
125      * Performs an async HTTP request, and loads the JSON from the response. If &lt;i&gt;params&lt;/i&gt; are specified it uses POST, otherwise it uses GET.
126      * @param {Object/String/Function} url The URL for this request, or a function to call to get the URL, or a config object containing any of the following options:
127      &lt;pre&gt;&lt;code&gt;
128      view.load({
129          url: &quot;your-url.php&quot;,
130          params: {param1: &quot;foo&quot;, param2: &quot;bar&quot;}, // or a URL encoded string
131          callback: yourFunction,
132          scope: yourObject, //(optional scope)
133          discardUrl: false,
134          nocache: false,
135          text: &quot;Loading...&quot;,
136          timeout: 30,
137          scripts: false
138      });
139      &lt;/code&gt;&lt;/pre&gt;
140      * The only required property is &lt;i&gt;url&lt;/i&gt;. The optional properties &lt;i&gt;nocache&lt;/i&gt;, &lt;i&gt;text&lt;/i&gt; and &lt;i&gt;scripts&lt;/i&gt;
141      * are respectively shorthand for &lt;i&gt;disableCaching&lt;/i&gt;, &lt;i&gt;indicatorText&lt;/i&gt;, and &lt;i&gt;loadScripts&lt;/i&gt; and are used to set their associated property on this UpdateManager instance.
142      * @param {String/Object} params (optional) The parameters to pass, as either a URL encoded string &quot;param1=1&amp;amp;param2=2&quot; or an object {param1: 1, param2: 2}
143      * @param {Function} callback (optional) Callback when transaction is complete - called with signature (oElement, bSuccess)
144      * @param {Boolean} discardUrl (optional) By default when you execute an update the defaultUrl is changed to the last used URL. If true, it will not store the URL.
145      */
146     </span><span class="jsdoc-var">load </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
147         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">um </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.getUpdateManager</span><span class="jsdoc-syntax">();
148         </span><span class="jsdoc-var">um.update.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">um</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
149     },
150
151     </span><span class="jsdoc-var">render </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">response</span><span class="jsdoc-syntax">){
152         </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
153         </span><span class="jsdoc-var">this.el.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
154         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
155         </span><span class="jsdoc-keyword">try</span><span class="jsdoc-syntax">{
156             </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.util.JSON.decode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">response.responseText</span><span class="jsdoc-syntax">);
157             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonRoot</span><span class="jsdoc-syntax">){
158                 
159                 </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.jsonRoot</span><span class="jsdoc-syntax">];
160             }
161         } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
162         }
163         </span><span class="jsdoc-comment">/**
164          * The current JSON data or null
165          */
166         </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
167         </span><span class="jsdoc-var">this.beforeRender</span><span class="jsdoc-syntax">();
168         </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
169     },
170
171 </span><span class="jsdoc-comment">/**
172  * Get the number of records in the current JSON dataset
173  * @return {Number}
174  */
175     </span><span class="jsdoc-var">getCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
176         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.jsonData.length </span><span class="jsdoc-syntax">: 0;
177     },
178
179 </span><span class="jsdoc-comment">/**
180  * Returns the JSON object for the specified node(s)
181  * @param {HTMLElement/Array} node The node or an array of nodes
182  * @return {Object/Array} If you pass in an array, you get an array back, otherwise
183  * you get the JSON object for the node
184  */
185     </span><span class="jsdoc-var">getNodeData </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">){
186         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">){
187             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= [];
188             </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">node.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">++){
189                 </span><span class="jsdoc-var">data.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getNodeData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]));
190             }
191             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">;
192         }
193         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)] || </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">;
194     },
195
196     </span><span class="jsdoc-var">beforeRender </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
197         </span><span class="jsdoc-var">this.snapshot </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">;
198         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sortInfo</span><span class="jsdoc-syntax">){
199             </span><span class="jsdoc-var">this.sort.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.sortInfo</span><span class="jsdoc-syntax">);
200         }
201         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforerender&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">);
202     },
203
204     </span><span class="jsdoc-var">onLoad </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
205         </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">this.jsonData</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
206     },
207
208     </span><span class="jsdoc-var">onLoadException </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
209         </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">o</span><span class="jsdoc-syntax">);
210     },
211
212 </span><span class="jsdoc-comment">/**
213  * Filter the data by a specific property.
214  * @param {String} property A property on your JSON objects
215  * @param {String/RegExp} value Either string that the property values
216  * should start with, or a RegExp to test against the property
217  */
218     </span><span class="jsdoc-var">filter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">property</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">){
219         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">){
220             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= [];
221             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ss </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
222             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;string&quot;</span><span class="jsdoc-syntax">){
223                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">vlen </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">value.length</span><span class="jsdoc-syntax">;
224                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">vlen </span><span class="jsdoc-syntax">== 0){
225                     </span><span class="jsdoc-var">this.clearFilter</span><span class="jsdoc-syntax">();
226                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
227                 }
228                 </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">value.toLowerCase</span><span class="jsdoc-syntax">();
229                 </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">ss.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">++){
230                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ss</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
231                     </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">property</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.substr</span><span class="jsdoc-syntax">(0, </span><span class="jsdoc-var">vlen</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">){
232                         </span><span class="jsdoc-var">data.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
233                     }
234                 }
235             } </span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value.exec</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// regex?
236                 </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">ss.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">++){
237                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ss</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
238                     </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">property</span><span class="jsdoc-syntax">])){
239                         </span><span class="jsdoc-var">data.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
240                     }
241                 }
242             } </span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
243                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
244             }
245             </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">;
246             </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
247         }
248     },
249
250 </span><span class="jsdoc-comment">/**
251  * Filter by a function. The passed function will be called with each
252  * object in the current dataset. If the function returns true the value is kept,
253  * otherwise it is filtered.
254  * @param {Function} fn
255  * @param {Object} scope (optional) The scope of the function (defaults to this JsonView)
256  */
257     </span><span class="jsdoc-var">filterBy </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">){
258         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">){
259             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= [];
260             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ss </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
261             </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">ss.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">++){
262                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ss</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
263                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fn.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">)){
264                     </span><span class="jsdoc-var">data.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
265                 }
266             }
267             </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">;
268             </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
269         }
270     },
271
272 </span><span class="jsdoc-comment">/**
273  * Clears the current filter.
274  */
275     </span><span class="jsdoc-var">clearFilter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
276         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.snapshot </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">){
277             </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
278             </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
279         }
280     },
281
282
283 </span><span class="jsdoc-comment">/**
284  * Sorts the data for this view and refreshes it.
285  * @param {String} property A property on your JSON objects to sort on
286  * @param {String} direction (optional) &quot;desc&quot; or &quot;asc&quot; (defaults to &quot;asc&quot;)
287  * @param {Function} sortType (optional) A function to call to convert the data to a sortable value.
288  */
289     </span><span class="jsdoc-var">sort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">property</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sortType</span><span class="jsdoc-syntax">){
290         </span><span class="jsdoc-var">this.sortInfo </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.prototype.slice.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">, 0);
291         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">){
292             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">property</span><span class="jsdoc-syntax">;
293             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">dir </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">dir.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">&quot;desc&quot;</span><span class="jsdoc-syntax">;
294             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o1</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o2</span><span class="jsdoc-syntax">){
295                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sortType </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">sortType</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o1</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">]) : </span><span class="jsdoc-var">o1</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">];
296                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v2 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sortType </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">sortType</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o2</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">]) : </span><span class="jsdoc-var">o2</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">];
297                 ;
298                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">v2</span><span class="jsdoc-syntax">){
299                     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? +1 : -1;
300                 } </span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">&gt; </span><span class="jsdoc-var">v2</span><span class="jsdoc-syntax">){
301                     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? -1 : +1;
302                 } </span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
303                     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0;
304                 }
305             };
306             </span><span class="jsdoc-var">this.jsonData.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
307             </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
308             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">){
309                 </span><span class="jsdoc-var">this.snapshot.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
310             }
311         }
312     }
313 });</span></code></body></html>