1 <html><head><title>Roo/data/Store.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 * @class Roo.data.Store
16 * @extends Roo.util.Observable
17 * The Store class encapsulates a client side cache of {@link Roo.data.Record} objects which provide input data
18 * for widgets such as the Roo.grid.Grid, or the Roo.form.ComboBox.<br>
20 * A Store object uses an implementation of {@link Roo.data.DataProxy} to access a data object unless you call loadData() directly and pass in your data. The Store object
21 * has no knowledge of the format of the data returned by the Proxy.<br>
23 * A Store object uses its configured implementation of {@link Roo.data.DataReader} to create {@link Roo.data.Record}
24 * instances from the data object. These records are cached and made available through accessor functions.
26 * Creates a new Store.
27 * @param {Object} config A config object containing the objects needed for the Store to access data,
28 * and read the data into Records.
30 </span><span class="jsdoc-var">Roo.data.Store </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">){
31 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.util.MixedCollection</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
32 </span><span class="jsdoc-var">this.data.getKey </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
33 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">o.id</span><span class="jsdoc-syntax">;
35 </span><span class="jsdoc-var">this.baseParams </span><span class="jsdoc-syntax">= {};
36 </span><span class="jsdoc-comment">// private
37 </span><span class="jsdoc-var">this.paramNames </span><span class="jsdoc-syntax">= {
38 </span><span class="jsdoc-string">"start" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"start"</span><span class="jsdoc-syntax">,
39 </span><span class="jsdoc-string">"limit" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"limit"</span><span class="jsdoc-syntax">,
40 </span><span class="jsdoc-string">"sort" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"sort"</span><span class="jsdoc-syntax">,
41 </span><span class="jsdoc-string">"dir" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"dir"</span><span class="jsdoc-syntax">,
42 </span><span class="jsdoc-string">"multisort" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"_multisort"
43 </span><span class="jsdoc-syntax">};
45 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">config.data</span><span class="jsdoc-syntax">){
46 </span><span class="jsdoc-var">this.inlineData </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">config.data</span><span class="jsdoc-syntax">;
47 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">config.data</span><span class="jsdoc-syntax">;
50 </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">);
52 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.reader</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// reader passed
53 </span><span class="jsdoc-var">this.reader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.reader</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data</span><span class="jsdoc-syntax">);
54 </span><span class="jsdoc-var">this.reader.xmodule </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.xmodule </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
55 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.recordType</span><span class="jsdoc-syntax">){
56 </span><span class="jsdoc-var">this.recordType </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.reader.recordType</span><span class="jsdoc-syntax">;
58 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.reader.onMetaChange</span><span class="jsdoc-syntax">){
59 </span><span class="jsdoc-var">this.reader.onMetaChange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.onMetaChange.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
63 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.recordType</span><span class="jsdoc-syntax">){
64 </span><span class="jsdoc-var">this.fields </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.recordType.prototype.fields</span><span class="jsdoc-syntax">;
66 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
68 </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
69 </span><span class="jsdoc-comment">/**
71 * Fires when the data cache has changed, and a widget which is using this Store
72 * as a Record cache should refresh its view.
75 </span><span class="jsdoc-var">datachanged </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
76 </span><span class="jsdoc-comment">/**
78 * Fires when this store's reader provides new metadata (fields). This is currently only support for JsonReaders.
80 * @param {Object} meta The JSON metadata
82 </span><span class="jsdoc-var">metachange </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
83 </span><span class="jsdoc-comment">/**
85 * Fires when Records have been added to the Store
87 * @param {Roo.data.Record[]} records The array of Records added
88 * @param {Number} index The index at which the record(s) were added
90 </span><span class="jsdoc-var">add </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
91 </span><span class="jsdoc-comment">/**
93 * Fires when a Record has been removed from the Store
95 * @param {Roo.data.Record} record The Record that was removed
96 * @param {Number} index The index at which the record was removed
98 </span><span class="jsdoc-var">remove </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
99 </span><span class="jsdoc-comment">/**
101 * Fires when a Record has been updated
102 * @param {Store} this
103 * @param {Roo.data.Record} record The Record that was updated
104 * @param {String} operation The update operation being performed. Value may be one of:
105 * <pre><code>
107 Roo.data.Record.REJECT
108 Roo.data.Record.COMMIT
109 * </code></pre>
111 </span><span class="jsdoc-var">update </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
112 </span><span class="jsdoc-comment">/**
114 * Fires when the data cache has been cleared.
115 * @param {Store} this
117 </span><span class="jsdoc-var">clear </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
118 </span><span class="jsdoc-comment">/**
120 * Fires before a request is made for a new data object. If the beforeload handler returns false
121 * the load action will be canceled.
122 * @param {Store} this
123 * @param {Object} options The loading options that were specified (see {@link #load} for details)
125 </span><span class="jsdoc-var">beforeload </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
126 </span><span class="jsdoc-comment">/**
127 * @event beforeloadadd
128 * Fires after a new set of Records has been loaded.
129 * @param {Store} this
130 * @param {Roo.data.Record[]} records The Records that were loaded
131 * @param {Object} options The loading options that were specified (see {@link #load} for details)
133 </span><span class="jsdoc-var">beforeloadadd </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
134 </span><span class="jsdoc-comment">/**
136 * Fires after a new set of Records has been loaded, before they are added to the store.
137 * @param {Store} this
138 * @param {Roo.data.Record[]} records The Records that were loaded
139 * @param {Object} options The loading options that were specified (see {@link #load} for details)
140 * @params {Object} return from reader
142 </span><span class="jsdoc-var">load </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
143 </span><span class="jsdoc-comment">/**
144 * @event loadexception
145 * Fires if an exception occurs in the Proxy during loading.
146 * Called with the signature of the Proxy's "loadexception" event.
147 * If you return Json { data: [] , success: false, .... } then this will be thrown with the following args
150 * @param {Object} return from JsonData.reader() - success, totalRecords, records
151 * @param {Object} load options
152 * @param {Object} jsonData from your request (normally this contains the Exception)
154 </span><span class="jsdoc-var">loadexception </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
155 </span><span class="jsdoc-syntax">});
157 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.proxy</span><span class="jsdoc-syntax">){
158 </span><span class="jsdoc-var">this.proxy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.proxy</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data</span><span class="jsdoc-syntax">);
159 </span><span class="jsdoc-var">this.proxy.xmodule </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.xmodule </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
160 </span><span class="jsdoc-var">this.relayEvents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.proxy</span><span class="jsdoc-syntax">, [</span><span class="jsdoc-string">"loadexception"</span><span class="jsdoc-syntax">]);
162 </span><span class="jsdoc-var">this.sortToggle </span><span class="jsdoc-syntax">= {};
163 </span><span class="jsdoc-var">this.sortOrder </span><span class="jsdoc-syntax">= []; </span><span class="jsdoc-comment">// array of order of sorting - updated by grid if multisort is enabled.
165 </span><span class="jsdoc-var">Roo.data.Store.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
167 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.inlineData</span><span class="jsdoc-syntax">){
168 </span><span class="jsdoc-var">this.loadData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.inlineData</span><span class="jsdoc-syntax">);
169 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.inlineData</span><span class="jsdoc-syntax">;
173 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.data.Store</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">, {
174 </span><span class="jsdoc-comment">/**
175 * @cfg {boolean} isLocal flag if data is locally available (and can be always looked up
176 * without a remote query - used by combo/forms at present.
180 * @cfg {Roo.data.DataProxy} proxy [required] The Proxy object which provides access to a data object.
183 * @cfg {Array} data Inline data to be loaded when the store is initialized.
186 * @cfg {Roo.data.DataReader} reader [required] The Reader object which processes the data object and returns
187 * an Array of Roo.data.record objects which are cached keyed by their <em>id</em> property.
190 * @cfg {Object} baseParams An object containing properties which are to be sent as parameters
191 * on any HTTP request
194 * @cfg {Object} sortInfo A config object in the format: {field: "fieldName", direction: "ASC|DESC"}
197 * @cfg {Boolean} multiSort enable multi column sorting (sort is based on the order of columns, remote only at present)
199 </span><span class="jsdoc-var">multiSort</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
200 </span><span class="jsdoc-comment">/**
201 * @cfg {boolean} remoteSort True if sorting is to be handled by requesting the Proxy to provide a refreshed
202 * version of the data object in sorted order, as opposed to sorting the Record cache in place (defaults to false).
204 </span><span class="jsdoc-var">remoteSort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
206 </span><span class="jsdoc-comment">/**
207 * @cfg {boolean} pruneModifiedRecords True to clear all modified record information each time the store is
208 * loaded or when a record is removed. (defaults to false).
210 </span><span class="jsdoc-var">pruneModifiedRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
212 </span><span class="jsdoc-comment">// private
213 </span><span class="jsdoc-var">lastOptions </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">,
215 </span><span class="jsdoc-comment">/**
216 * Add Records to the Store and fires the add event.
217 * @param {Roo.data.Record[]} records An Array of Roo.data.Record objects to add to the cache.
219 </span><span class="jsdoc-var">add </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">){
220 </span><span class="jsdoc-var">records </span><span class="jsdoc-syntax">= []</span><span class="jsdoc-var">.concat</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">);
221 </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">records.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">++){
222 </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
224 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.data.length</span><span class="jsdoc-syntax">;
225 </span><span class="jsdoc-var">this.data.addAll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">);
226 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"add"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
229 </span><span class="jsdoc-comment">/**
230 * Remove a Record from the Store and fires the remove event.
231 * @param {Ext.data.Record} record The Roo.data.Record object to remove from the cache.
233 </span><span class="jsdoc-var">remove </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">){
234 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.data.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
235 </span><span class="jsdoc-var">this.data.removeAt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
237 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pruneModifiedRecords</span><span class="jsdoc-syntax">){
238 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
240 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"remove"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
243 </span><span class="jsdoc-comment">/**
244 * Remove all Records from the Store and fires the clear event.
246 </span><span class="jsdoc-var">removeAll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
247 </span><span class="jsdoc-var">this.data.clear</span><span class="jsdoc-syntax">();
248 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pruneModifiedRecords</span><span class="jsdoc-syntax">){
249 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
251 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"clear"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
254 </span><span class="jsdoc-comment">/**
255 * Inserts Records to the Store at the given index and fires the add event.
256 * @param {Number} index The start index at which to insert the passed Records.
257 * @param {Roo.data.Record[]} records An Array of Roo.data.Record objects to add to the cache.
259 </span><span class="jsdoc-var">insert </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">){
260 </span><span class="jsdoc-var">records </span><span class="jsdoc-syntax">= []</span><span class="jsdoc-var">.concat</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</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">records.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">++){
262 </span><span class="jsdoc-var">this.data.insert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
263 </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
265 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"add"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
268 </span><span class="jsdoc-comment">/**
269 * Get the index within the cache of the passed Record.
270 * @param {Roo.data.Record} record The Roo.data.Record object to to find.
271 * @return {Number} The index of the passed Record. Returns -1 if not found.
273 </span><span class="jsdoc-var">indexOf </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">){
274 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
277 </span><span class="jsdoc-comment">/**
278 * Get the index within the cache of the Record with the passed id.
279 * @param {String} id The id of the Record to find.
280 * @return {Number} The index of the Record. Returns -1 if not found.
282 </span><span class="jsdoc-var">indexOfId </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">){
283 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.indexOfKey</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">);
286 </span><span class="jsdoc-comment">/**
287 * Get the Record with the specified id.
288 * @param {String} id The id of the Record to find.
289 * @return {Roo.data.Record} The Record with the passed id. Returns undefined if not found.
291 </span><span class="jsdoc-var">getById </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">){
292 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.key</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">);
295 </span><span class="jsdoc-comment">/**
296 * Get the Record at the specified index.
297 * @param {Number} index The index of the Record to find.
298 * @return {Roo.data.Record} The Record at the passed index. Returns undefined if not found.
300 </span><span class="jsdoc-var">getAt </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">){
301 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.itemAt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
304 </span><span class="jsdoc-comment">/**
305 * Returns a range of Records between specified indices.
306 * @param {Number} startIndex (optional) The starting index (defaults to 0)
307 * @param {Number} endIndex (optional) The ending index (defaults to the last Record in the Store)
308 * @return {Roo.data.Record[]} An array of Records
310 </span><span class="jsdoc-var">getRange </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">start</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">){
311 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.getRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">start</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">);
314 </span><span class="jsdoc-comment">// private
315 </span><span class="jsdoc-var">storeOptions </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
316 </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">({}, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
317 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">o.callback</span><span class="jsdoc-syntax">;
318 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">o.scope</span><span class="jsdoc-syntax">;
319 </span><span class="jsdoc-var">this.lastOptions </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
322 </span><span class="jsdoc-comment">/**
323 * Loads the Record cache from the configured Proxy using the configured Reader.
325 * If using remote paging, then the first load call must specify the <em>start</em>
326 * and <em>limit</em> properties in the options.params property to establish the initial
327 * position within the dataset, and the number of Records to cache on each read from the Proxy.
329 * <strong>It is important to note that for remote data sources, loading is asynchronous,
330 * and this call will return before the new data has been loaded. Perform any post-processing
331 * in a callback function, or in a "load" event handler.</strong>
333 * @param {Object} options An object containing properties which control loading options:<ul>
334 * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
335 * <li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..
338 data : data, // array of key=>value data like JsonReader
345 * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
346 * passed the following arguments:<ul>
347 * <li>r : Roo.data.Record[]</li>
348 * <li>options: Options object from the load call</li>
349 * <li>success: Boolean success indicator</li></ul></li>
350 * <li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>
351 * <li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>
354 </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">options</span><span class="jsdoc-syntax">){
355 </span><span class="jsdoc-var">options </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">options </span><span class="jsdoc-syntax">|| {};
356 </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">"beforeload"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
357 </span><span class="jsdoc-var">this.storeOptions</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">);
358 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.params </span><span class="jsdoc-syntax">|| {}, </span><span class="jsdoc-var">this.baseParams</span><span class="jsdoc-syntax">);
359 </span><span class="jsdoc-comment">// if meta was not loaded from remote source.. try requesting it.
360 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.reader.metaFromRemote</span><span class="jsdoc-syntax">) {
361 </span><span class="jsdoc-var">p._requestMeta </span><span class="jsdoc-syntax">= 1;
363 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sortInfo </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.remoteSort</span><span class="jsdoc-syntax">){
364 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">pn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.paramNames</span><span class="jsdoc-syntax">;
365 </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">pn</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">"sort"</span><span class="jsdoc-syntax">]] = </span><span class="jsdoc-var">this.sortInfo.field</span><span class="jsdoc-syntax">;
366 </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">pn</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">"dir"</span><span class="jsdoc-syntax">]] = </span><span class="jsdoc-var">this.sortInfo.direction</span><span class="jsdoc-syntax">;
368 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.multiSort</span><span class="jsdoc-syntax">) {
369 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">pn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.paramNames</span><span class="jsdoc-syntax">;
370 </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">pn</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">"multisort"</span><span class="jsdoc-syntax">]] = </span><span class="jsdoc-var">Roo.encode</span><span class="jsdoc-syntax">( { </span><span class="jsdoc-var">sort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.sortToggle</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">order</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.sortOrder </span><span class="jsdoc-syntax">});
373 </span><span class="jsdoc-var">this.proxy.load</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.reader</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.loadRecords</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">);
377 </span><span class="jsdoc-comment">/**
378 * Reloads the Record cache from the configured Proxy using the configured Reader and
379 * the options from the last load operation performed.
380 * @param {Object} options (optional) An object containing properties which may override the options
381 * used in the last load operation. See {@link #load} for details (defaults to null, in which case
382 * the most recently used options are reused).
384 </span><span class="jsdoc-var">reload </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">){
385 </span><span class="jsdoc-var">this.load</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.applyIf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">||{}, </span><span class="jsdoc-var">this.lastOptions</span><span class="jsdoc-syntax">));
388 </span><span class="jsdoc-comment">// private
389 // Called as a callback by the Reader during a load operation.
390 </span><span class="jsdoc-var">loadRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">success</span><span class="jsdoc-syntax">){
392 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
393 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">success </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
394 </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">options</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
396 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.callback</span><span class="jsdoc-syntax">){
397 </span><span class="jsdoc-var">options.callback.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.scope </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, [], </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
399 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
401 </span><span class="jsdoc-comment">// if data returned failure - throw an exception.
402 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.success </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
403 </span><span class="jsdoc-comment">// show a message if no listener is registered.
404 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.hasListener</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'loadexception'</span><span class="jsdoc-syntax">) && </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.raw.errorMsg</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
405 </span><span class="jsdoc-var">Roo.MessageBox.alert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"Error loading"</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">o.raw.errorMsg</span><span class="jsdoc-syntax">);
407 </span><span class="jsdoc-comment">// loadmask wil be hooked into this..
408 </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">, </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o.raw.errorMsg</span><span class="jsdoc-syntax">);
409 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
411 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o.records</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o.totalRecords </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">r.length</span><span class="jsdoc-syntax">;
413 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"beforeloadadd"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
415 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">options </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">options.add </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">){
416 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pruneModifiedRecords</span><span class="jsdoc-syntax">){
417 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
419 </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">r.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">++){
420 </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
422 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">){
423 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
424 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
426 </span><span class="jsdoc-var">this.data.clear</span><span class="jsdoc-syntax">();
427 </span><span class="jsdoc-var">this.data.addAll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
428 </span><span class="jsdoc-var">this.totalLength </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">;
429 </span><span class="jsdoc-var">this.applySort</span><span class="jsdoc-syntax">();
430 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"datachanged"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
431 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
432 </span><span class="jsdoc-var">this.totalLength </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Math.max</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.data.length</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">r.length</span><span class="jsdoc-syntax">);
433 </span><span class="jsdoc-var">this.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
436 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">&& !</span><span class="jsdoc-var">Roo.isIOS </span><span class="jsdoc-syntax">&& !</span><span class="jsdoc-var">this.useNativeIOS </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.parent.emptyTitle.length</span><span class="jsdoc-syntax">) {
438 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">e </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.data.Record</span><span class="jsdoc-syntax">({});
440 </span><span class="jsdoc-var">e.set</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.parent.displayField</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.parent.emptyTitle</span><span class="jsdoc-syntax">);
441 </span><span class="jsdoc-var">e.set</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.parent.valueField</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
443 </span><span class="jsdoc-var">this.insert</span><span class="jsdoc-syntax">(0, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
446 </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">r</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
447 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.callback</span><span class="jsdoc-syntax">){
448 </span><span class="jsdoc-var">options.callback.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.scope </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
453 </span><span class="jsdoc-comment">/**
454 * Loads data from a passed data block. A Reader which understands the format of the data
455 * must have been configured in the constructor.
456 * @param {Object} data The data block from which to read the Records. The format of the data expected
457 * is dependent on the type of Reader that is configured and should correspond to that Reader's readRecords parameter.
458 * @param {Boolean} append (Optional) True to append the new Records rather than replace the existing cache.
460 </span><span class="jsdoc-var">loadData </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">append</span><span class="jsdoc-syntax">){
461 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.reader.readRecords</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
462 </span><span class="jsdoc-var">this.loadRecords</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">, {</span><span class="jsdoc-var">add</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">append</span><span class="jsdoc-syntax">}, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
465 </span><span class="jsdoc-comment">/**
466 * using 'cn' the nested child reader read the child array into it's child stores.
467 * @param {Object} rec The record with a 'children array
469 </span><span class="jsdoc-var">loadDataFromChildren </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rec</span><span class="jsdoc-syntax">)
471 </span><span class="jsdoc-var">this.loadData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.reader.toLoadData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rec</span><span class="jsdoc-syntax">));
475 </span><span class="jsdoc-comment">/**
476 * Gets the number of cached records.
478 * <em>If using paging, this may not be the total size of the dataset. If the data object
479 * used by the Reader contains the dataset size, then the getTotalCount() function returns
480 * the data set size</em>
482 </span><span class="jsdoc-var">getCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
483 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.length </span><span class="jsdoc-syntax">|| 0;
486 </span><span class="jsdoc-comment">/**
487 * Gets the total number of records in the dataset as returned by the server.
489 * <em>If using paging, for this to be accurate, the data object used by the Reader must contain
490 * the dataset size</em>
492 </span><span class="jsdoc-var">getTotalCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
493 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.totalLength </span><span class="jsdoc-syntax">|| 0;
496 </span><span class="jsdoc-comment">/**
497 * Returns the sort state of the Store as an object with two properties:
498 * <pre><code>
499 field {String} The name of the field by which the Records are sorted
500 direction {String} The sort order, "ASC" or "DESC"
501 * </code></pre>
503 </span><span class="jsdoc-var">getSortState </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
504 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.sortInfo</span><span class="jsdoc-syntax">;
507 </span><span class="jsdoc-comment">// private
508 </span><span class="jsdoc-var">applySort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
509 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sortInfo </span><span class="jsdoc-syntax">&& !</span><span class="jsdoc-var">this.remoteSort</span><span class="jsdoc-syntax">){
510 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.sortInfo</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">s.field</span><span class="jsdoc-syntax">;
511 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.fields.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.sortType</span><span class="jsdoc-syntax">;
512 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r1</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r2</span><span class="jsdoc-syntax">){
513 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r1.data</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">]), </span><span class="jsdoc-var">v2 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r2.data</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">]);
514 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">> </span><span class="jsdoc-var">v2 </span><span class="jsdoc-syntax">? 1 : (</span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">v2 </span><span class="jsdoc-syntax">? -1 : 0);
516 </span><span class="jsdoc-var">this.data.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.direction</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">);
517 </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.snapshot </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.data</span><span class="jsdoc-syntax">){
518 </span><span class="jsdoc-var">this.snapshot.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.direction</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">);
523 </span><span class="jsdoc-comment">/**
524 * Sets the default sort column and order to be used by the next load operation.
525 * @param {String} fieldName The name of the field to sort by.
526 * @param {String} dir (optional) The sort order, "ASC" or "DESC" (defaults to "ASC")
528 </span><span class="jsdoc-var">setDefaultSort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">field</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">){
529 </span><span class="jsdoc-var">this.sortInfo </span><span class="jsdoc-syntax">= {</span><span class="jsdoc-var">field</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">field</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">direction</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">dir </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">dir.toUpperCase</span><span class="jsdoc-syntax">() : </span><span class="jsdoc-string">"ASC"</span><span class="jsdoc-syntax">};
532 </span><span class="jsdoc-comment">/**
534 * If remote sorting is used, the sort is performed on the server, and the cache is
535 * reloaded. If local sorting is used, the cache is sorted internally.
536 * @param {String} fieldName The name of the field to sort by.
537 * @param {String} dir (optional) The sort order, "ASC" or "DESC" (defaults to "ASC")
539 </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">fieldName</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">){
540 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.fields.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fieldName</span><span class="jsdoc-syntax">);
541 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">){
542 </span><span class="jsdoc-var">this.sortToggle</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">this.sortToggle</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">] || </span><span class="jsdoc-var">f.sortDir</span><span class="jsdoc-syntax">;
544 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.multiSort </span><span class="jsdoc-syntax">|| (</span><span class="jsdoc-var">this.sortInfo </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.sortInfo.field </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">) ){ </span><span class="jsdoc-comment">// toggle sort dir
545 </span><span class="jsdoc-var">dir </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">this.sortToggle</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">] || </span><span class="jsdoc-string">"ASC"</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toggle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"ASC"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">"DESC"</span><span class="jsdoc-syntax">);
546 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
547 </span><span class="jsdoc-var">dir </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">f.sortDir</span><span class="jsdoc-syntax">;
550 </span><span class="jsdoc-var">this.sortToggle</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">;
551 </span><span class="jsdoc-var">this.sortInfo </span><span class="jsdoc-syntax">= {</span><span class="jsdoc-var">field</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">f.name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">direction</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">};
552 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.remoteSort</span><span class="jsdoc-syntax">){
553 </span><span class="jsdoc-var">this.applySort</span><span class="jsdoc-syntax">();
554 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"datachanged"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
555 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
556 </span><span class="jsdoc-var">this.load</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.lastOptions</span><span class="jsdoc-syntax">);
560 </span><span class="jsdoc-comment">/**
561 * Calls the specified function for each of the Records in the cache.
562 * @param {Function} fn The function to call. The Record is passed as the first parameter.
563 * Returning <em>false</em> aborts and exits the iteration.
564 * @param {Object} scope (optional) The scope in which to call the function (defaults to the Record).
566 </span><span class="jsdoc-var">each </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">){
567 </span><span class="jsdoc-var">this.data.each</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">);
570 </span><span class="jsdoc-comment">/**
571 * Gets all records modified since the last commit. Modified records are persisted across load operations
572 * (e.g., during paging).
573 * @return {Roo.data.Record[]} An array of Records containing outstanding modifications.
575 </span><span class="jsdoc-var">getModifiedRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
576 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.modified</span><span class="jsdoc-syntax">;
579 </span><span class="jsdoc-comment">// private
580 </span><span class="jsdoc-var">createFilterFn </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">, </span><span class="jsdoc-var">anyMatch</span><span class="jsdoc-syntax">){
581 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">value.exec</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// not a regex
582 </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">String</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">);
583 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value.length </span><span class="jsdoc-syntax">== 0){
584 </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
586 </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">RegExp</span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">anyMatch </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'^'</span><span class="jsdoc-syntax">) + </span><span class="jsdoc-var">Roo.escapeRe</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">), </span><span class="jsdoc-string">"i"</span><span class="jsdoc-syntax">);
588 </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
589 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">value.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r.data</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">property</span><span class="jsdoc-syntax">]);
593 </span><span class="jsdoc-comment">/**
594 * Sums the value of <i>property</i> for each record between start and end and returns the result.
595 * @param {String} property A field on your records
596 * @param {Number} start The record index to start at (defaults to 0)
597 * @param {Number} end The last record index to include (defaults to length - 1)
598 * @return {Number} The sum
600 </span><span class="jsdoc-var">sum </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">start</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">){
601 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.data.items</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= 0;
602 </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">|| 0;
603 </span><span class="jsdoc-var">end </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">end </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">end </span><span class="jsdoc-syntax">=== 0) ? </span><span class="jsdoc-var">end </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">rs.length</span><span class="jsdoc-syntax">-1;
605 </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">= </span><span class="jsdoc-var">start</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax"><= </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
606 </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">+= (</span><span class="jsdoc-var">rs</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.data</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">property</span><span class="jsdoc-syntax">] || 0);
608 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
611 </span><span class="jsdoc-comment">/**
612 * Filter the records by a specified property.
613 * @param {String} field A field on your records
614 * @param {String/RegExp} value Either a string that the field
615 * should start with or a RegExp to test against the field
616 * @param {Boolean} anyMatch True to match any part not just the beginning
618 </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">, </span><span class="jsdoc-var">anyMatch</span><span class="jsdoc-syntax">){
619 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createFilterFn</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">, </span><span class="jsdoc-var">anyMatch</span><span class="jsdoc-syntax">);
620 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">fn </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.filterBy</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">this.clearFilter</span><span class="jsdoc-syntax">();
623 </span><span class="jsdoc-comment">/**
624 * Filter by a function. The specified function will be called with each
625 * record in this data source. If the function returns true the record is included,
626 * otherwise it is filtered.
627 * @param {Function} fn The function to be called, it will receive 2 args (record, id)
628 * @param {Object} scope (optional) The scope of the function (defaults to this)
630 </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">){
631 </span><span class="jsdoc-var">this.snapshot </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.data</span><span class="jsdoc-syntax">;
632 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.queryBy</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">||</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
633 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"datachanged"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
636 </span><span class="jsdoc-comment">/**
637 * Query the records by a specified property.
638 * @param {String} field A field on your records
639 * @param {String/RegExp} value Either a string that the field
640 * should start with or a RegExp to test against the field
641 * @param {Boolean} anyMatch True to match any part not just the beginning
642 * @return {MixedCollection} Returns an Roo.util.MixedCollection of the matched records
644 </span><span class="jsdoc-var">query </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">, </span><span class="jsdoc-var">anyMatch</span><span class="jsdoc-syntax">){
645 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createFilterFn</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">, </span><span class="jsdoc-var">anyMatch</span><span class="jsdoc-syntax">);
646 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">fn </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.queryBy</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">this.data.clone</span><span class="jsdoc-syntax">();
649 </span><span class="jsdoc-comment">/**
650 * Query by a function. The specified function will be called with each
651 * record in this data source. If the function returns true the record is included
653 * @param {Function} fn The function to be called, it will receive 2 args (record, id)
654 * @param {Object} scope (optional) The scope of the function (defaults to this)
655 @return {MixedCollection} Returns an Roo.util.MixedCollection of the matched records
657 </span><span class="jsdoc-var">queryBy </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">){
658 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.data</span><span class="jsdoc-syntax">;
659 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">data.filterBy</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">||</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
662 </span><span class="jsdoc-comment">/**
663 * Collects unique values for a particular dataIndex from this store.
664 * @param {String} dataIndex The property to collect
665 * @param {Boolean} allowNull (optional) Pass true to allow null, undefined or empty string values
666 * @param {Boolean} bypassFilter (optional) Pass true to collect from all records, even ones which are filtered
667 * @return {Array} An array of the unique values
669 </span><span class="jsdoc-var">collect </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">dataIndex</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">allowNull</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">bypassFilter</span><span class="jsdoc-syntax">){
670 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">bypassFilter </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">) ?
671 </span><span class="jsdoc-var">this.snapshot.items </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.data.items</span><span class="jsdoc-syntax">;
672 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sv</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= [], </span><span class="jsdoc-var">l </span><span class="jsdoc-syntax">= {};
673 </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">d.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">++){
674 </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.data</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">dataIndex</span><span class="jsdoc-syntax">];
675 </span><span class="jsdoc-var">sv </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">String</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">);
676 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">allowNull </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">Roo.isEmpty</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">)) && !</span><span class="jsdoc-var">l</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">sv</span><span class="jsdoc-syntax">]){
677 </span><span class="jsdoc-var">l</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">sv</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
678 </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">r.length</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
681 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">;
684 </span><span class="jsdoc-comment">/**
685 * Revert to a view of the Record cache with no filtering applied.
686 * @param {Boolean} suppressEvent If true the filter is cleared silently without notifying listeners
688 </span><span class="jsdoc-var">clearFilter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">suppressEvent</span><span class="jsdoc-syntax">){
689 </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.snapshot </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.data</span><span class="jsdoc-syntax">){
690 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
691 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
692 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">suppressEvent </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">){
693 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"datachanged"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
698 </span><span class="jsdoc-comment">// private
699 </span><span class="jsdoc-var">afterEdit </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">){
700 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.modified.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">) == -1){
701 </span><span class="jsdoc-var">this.modified.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
703 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"update"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data.Record.EDIT</span><span class="jsdoc-syntax">);
706 </span><span class="jsdoc-comment">// private
707 </span><span class="jsdoc-var">afterReject </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">){
708 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
709 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"update"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data.Record.REJECT</span><span class="jsdoc-syntax">);
712 </span><span class="jsdoc-comment">// private
713 </span><span class="jsdoc-var">afterCommit </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">){
714 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
715 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"update"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data.Record.COMMIT</span><span class="jsdoc-syntax">);
718 </span><span class="jsdoc-comment">/**
719 * Commit all Records with outstanding changes. To handle updates for changes, subscribe to the
720 * Store's "update" event, and perform updating when the third parameter is Roo.data.Record.COMMIT.
722 </span><span class="jsdoc-var">commitChanges </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
723 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.modified.slice</span><span class="jsdoc-syntax">(0);
724 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
725 </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">m.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">++){
726 </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.commit</span><span class="jsdoc-syntax">();
730 </span><span class="jsdoc-comment">/**
731 * Cancel outstanding changes on all changed records.
733 </span><span class="jsdoc-var">rejectChanges </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
734 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.modified.slice</span><span class="jsdoc-syntax">(0);
735 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
736 </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">m.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">++){
737 </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.reject</span><span class="jsdoc-syntax">();
741 </span><span class="jsdoc-var">onMetaChange </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">meta</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">rtype</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
742 </span><span class="jsdoc-var">this.recordType </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">rtype</span><span class="jsdoc-syntax">;
743 </span><span class="jsdoc-var">this.fields </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">rtype.prototype.fields</span><span class="jsdoc-syntax">;
744 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
745 </span><span class="jsdoc-var">this.sortInfo </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">meta.sortInfo </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.sortInfo</span><span class="jsdoc-syntax">;
746 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
747 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'metachange'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.reader.meta</span><span class="jsdoc-syntax">);
750 </span><span class="jsdoc-var">moveIndex </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">)
752 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">);
754 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newIndex </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">;
756 </span><span class="jsdoc-var">this.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">);
758 </span><span class="jsdoc-var">this.insert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newIndex</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">);
761 });</span></code></body></html>