1 <html><head><title>/home/edward/gitlive/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">/*
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">
15 * Shortcut class to create a JSON + {@link Roo.UpdateManager} template view. Usage:
16 <pre><code>
17 var view = new Roo.JsonView({
18 container: "my-element",
19 tpl: '&lt;div id="{id}"&gt;{foo} - {bar}&lt;/div&gt;', // auto create template
21 jsonRoot: "data"
24 // listen for node click?
25 view.on("click", function(vw, index, node, e){
26 alert('Node "' + node.id + '" at index: ' + index + " was clicked.");
29 // direct load of JSON data
30 view.load("foobar.php");
32 // Example from my blog list
33 var tpl = new Roo.Template(
34 '&lt;div class="entry"&gt;' +
35 '&lt;a class="entry-title" href="{link}"&gt;{title}&lt;/a&gt;' +
36 "&lt;h4&gt;{date} by {author} | {comments} Comments&lt;/h4&gt;{description}" +
37 "&lt;/div&gt;&lt;hr /&gt;"
40 var moreView = new Roo.JsonView({
41 container : "entry-list",
43 jsonRoot: "posts"
45 moreView.on("beforerender", this.sortEntries, this);
47 url: "/blog/get-posts.php",
48 params: "allposts=true",
49 text: "Loading Blog Entries..."
51 </code></pre>
53 * Note: old code is supported with arguments : (container, template, config)
57 * Create a new JsonView
59 * @param {Object} config The config object
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">){
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">);
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">"update"</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">"failure"</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">);
72 </span><span class="jsdoc-comment">/**
74 * Fires before rendering of the downloaded JSON data.
75 * @param {Roo.JsonView} this
76 * @param {Object} data The JSON data loaded
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
86 * @event loadexception
87 * Fires when loading fails.
88 * @param {Roo.JsonView} this
89 * @param {Object} response The raw Connect response object
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">});
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
101 </span><span class="jsdoc-var">jsonRoot </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">,
103 </span><span class="jsdoc-comment">/**
104 * Refreshes the view.
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">""</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">&& </span><span class="jsdoc-var">o.length </span><span class="jsdoc-syntax">> 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">< </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">);
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">);
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">""</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);
124 </span><span class="jsdoc-comment">/**
125 * Performs an async HTTP request, and loads the JSON from the response. If <i>params</i> 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 <pre><code>
129 url: "your-url.php",
130 params: {param1: "foo", param2: "bar"}, // or a URL encoded string
131 callback: yourFunction,
132 scope: yourObject, //(optional scope)
135 text: "Loading...",
139 </code></pre>
140 * The only required property is <i>url</i>. The optional properties <i>nocache</i>, <i>text</i> and <i>scripts</i>
141 * are respectively shorthand for <i>disableCaching</i>, <i>indicatorText</i>, and <i>loadScripts</i> 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 "param1=1&amp;param2=2" 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.
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">);
151 </span><span class="jsdoc-comment">// note - render is a standard framework call...
152 // using it for the response is really flaky... - it's called by UpdateManager normally, except when called by the XComponent/addXtype.
153 </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">){
155 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
156 </span><span class="jsdoc-var">this.el.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">);
157 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
158 </span><span class="jsdoc-keyword">try</span><span class="jsdoc-syntax">{
159 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">response </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">) {
160 </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">);
161 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonRoot</span><span class="jsdoc-syntax">){
163 </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">];
166 } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
168 </span><span class="jsdoc-comment">/**
169 * The current JSON data or null
171 </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
172 </span><span class="jsdoc-var">this.beforeRender</span><span class="jsdoc-syntax">();
173 </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
176 </span><span class="jsdoc-comment">/**
177 * Get the number of records in the current JSON dataset
180 </span><span class="jsdoc-var">getCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
181 </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;
184 </span><span class="jsdoc-comment">/**
185 * Returns the JSON object for the specified node(s)
186 * @param {HTMLElement/Array} node The node or an array of nodes
187 * @return {Object/Array} If you pass in an array, you get an array back, otherwise
188 * you get the JSON object for the node
190 </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">){
191 </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">){
192 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </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">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">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
194 </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">]));
196 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">;
198 </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">;
201 </span><span class="jsdoc-var">beforeRender </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
202 </span><span class="jsdoc-var">this.snapshot </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">;
203 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sortInfo</span><span class="jsdoc-syntax">){
204 </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">);
206 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"beforerender"</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">);
209 </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">){
210 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"load"</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">);
213 </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">){
214 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"loadexception"</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">);
217 </span><span class="jsdoc-comment">/**
218 * Filter the data by a specific property.
219 * @param {String} property A property on your JSON objects
220 * @param {String/RegExp} value Either string that the property values
221 * should start with, or a RegExp to test against the property
223 </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">){
224 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">){
225 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= [];
226 </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">;
227 </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">"string"</span><span class="jsdoc-syntax">){
228 </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">;
229 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">vlen </span><span class="jsdoc-syntax">== 0){
230 </span><span class="jsdoc-var">this.clearFilter</span><span class="jsdoc-syntax">();
231 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
233 </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">value.toLowerCase</span><span class="jsdoc-syntax">();
234 </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">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
235 </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">];
236 </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">){
237 </span><span class="jsdoc-var">data.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
240 } </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?
241 </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">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
242 </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">];
243 </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">])){
244 </span><span class="jsdoc-var">data.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
247 } </span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
248 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
250 </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">;
251 </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
255 </span><span class="jsdoc-comment">/**
256 * Filter by a function. The passed function will be called with each
257 * object in the current dataset. If the function returns true the value is kept,
258 * otherwise it is filtered.
259 * @param {Function} fn
260 * @param {Object} scope (optional) The scope of the function (defaults to this JsonView)
262 </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">){
263 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">){
264 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= [];
265 </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">;
266 </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">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
267 </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">];
268 </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">)){
269 </span><span class="jsdoc-var">data.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
272 </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">;
273 </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
277 </span><span class="jsdoc-comment">/**
278 * Clears the current filter.
280 </span><span class="jsdoc-var">clearFilter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
281 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.snapshot </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">){
282 </span><span class="jsdoc-var">this.jsonData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
283 </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
288 </span><span class="jsdoc-comment">/**
289 * Sorts the data for this view and refreshes it.
290 * @param {String} property A property on your JSON objects to sort on
291 * @param {String} direction (optional) "desc" or "asc" (defaults to "asc")
292 * @param {Function} sortType (optional) A function to call to convert the data to a sortable value.
294 </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">){
295 </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);
296 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.jsonData</span><span class="jsdoc-syntax">){
297 </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">;
298 </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">&& </span><span class="jsdoc-var">dir.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">"desc"</span><span class="jsdoc-syntax">;
299 </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">){
300 </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">];
301 </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">];
303 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">v2</span><span class="jsdoc-syntax">){
304 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? +1 : -1;
305 } </span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">> </span><span class="jsdoc-var">v2</span><span class="jsdoc-syntax">){
306 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? -1 : +1;
307 } </span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
308 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0;
311 </span><span class="jsdoc-var">this.jsonData.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
312 </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
313 </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">){
314 </span><span class="jsdoc-var">this.snapshot.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
318 });</span></code></body></html>