1 <html><head><title>../roojs1/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 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.Reader} reader 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">);
236 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pruneModifiedRecords</span><span class="jsdoc-syntax">){
237 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
239 </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">);
242 </span><span class="jsdoc-comment">/**
243 * Remove all Records from the Store and fires the clear event.
245 </span><span class="jsdoc-var">removeAll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
246 </span><span class="jsdoc-var">this.data.clear</span><span class="jsdoc-syntax">();
247 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pruneModifiedRecords</span><span class="jsdoc-syntax">){
248 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
250 </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">);
253 </span><span class="jsdoc-comment">/**
254 * Inserts Records to the Store at the given index and fires the add event.
255 * @param {Number} index The start index at which to insert the passed Records.
256 * @param {Roo.data.Record[]} records An Array of Roo.data.Record objects to add to the cache.
258 </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">){
259 </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">);
260 </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">++){
261 </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">]);
262 </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">);
264 </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">);
267 </span><span class="jsdoc-comment">/**
268 * Get the index within the cache of the passed Record.
269 * @param {Roo.data.Record} record The Roo.data.Record object to to find.
270 * @return {Number} The index of the passed Record. Returns -1 if not found.
272 </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">){
273 </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">);
276 </span><span class="jsdoc-comment">/**
277 * Get the index within the cache of the Record with the passed id.
278 * @param {String} id The id of the Record to find.
279 * @return {Number} The index of the Record. Returns -1 if not found.
281 </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">){
282 </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">);
285 </span><span class="jsdoc-comment">/**
286 * Get the Record with the specified id.
287 * @param {String} id The id of the Record to find.
288 * @return {Roo.data.Record} The Record with the passed id. Returns undefined if not found.
290 </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">){
291 </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">);
294 </span><span class="jsdoc-comment">/**
295 * Get the Record at the specified index.
296 * @param {Number} index The index of the Record to find.
297 * @return {Roo.data.Record} The Record at the passed index. Returns undefined if not found.
299 </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">){
300 </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">);
303 </span><span class="jsdoc-comment">/**
304 * Returns a range of Records between specified indices.
305 * @param {Number} startIndex (optional) The starting index (defaults to 0)
306 * @param {Number} endIndex (optional) The ending index (defaults to the last Record in the Store)
307 * @return {Roo.data.Record[]} An array of Records
309 </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">){
310 </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">);
313 </span><span class="jsdoc-comment">// private
314 </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">){
315 </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">);
316 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">o.callback</span><span class="jsdoc-syntax">;
317 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">o.scope</span><span class="jsdoc-syntax">;
318 </span><span class="jsdoc-var">this.lastOptions </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
321 </span><span class="jsdoc-comment">/**
322 * Loads the Record cache from the configured Proxy using the configured Reader.
324 * If using remote paging, then the first load call must specify the <em>start</em>
325 * and <em>limit</em> properties in the options.params property to establish the initial
326 * position within the dataset, and the number of Records to cache on each read from the Proxy.
328 * <strong>It is important to note that for remote data sources, loading is asynchronous,
329 * and this call will return before the new data has been loaded. Perform any post-processing
330 * in a callback function, or in a "load" event handler.</strong>
332 * @param {Object} options An object containing properties which control loading options:<ul>
333 * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
334 * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
335 * passed the following arguments:<ul>
336 * <li>r : Roo.data.Record[]</li>
337 * <li>options: Options object from the load call</li>
338 * <li>success: Boolean success indicator</li></ul></li>
339 * <li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>
340 * <li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>
343 </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">){
344 </span><span class="jsdoc-var">options </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">options </span><span class="jsdoc-syntax">|| {};
345 </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">){
346 </span><span class="jsdoc-var">this.storeOptions</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">);
347 </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">);
348 </span><span class="jsdoc-comment">// if meta was not loaded from remote source.. try requesting it.
349 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.reader.metaFromRemote</span><span class="jsdoc-syntax">) {
350 </span><span class="jsdoc-var">p._requestMeta </span><span class="jsdoc-syntax">= 1;
352 </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">){
353 </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">;
354 </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">;
355 </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">;
357 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.multiSort</span><span class="jsdoc-syntax">) {
358 </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">;
359 </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">});
362 </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">);
366 </span><span class="jsdoc-comment">/**
367 * Reloads the Record cache from the configured Proxy using the configured Reader and
368 * the options from the last load operation performed.
369 * @param {Object} options (optional) An object containing properties which may override the options
370 * used in the last load operation. See {@link #load} for details (defaults to null, in which case
371 * the most recently used options are reused).
373 </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">){
374 </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">));
377 </span><span class="jsdoc-comment">// private
378 // Called as a callback by the Reader during a load operation.
379 </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">){
380 </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">success </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
381 </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">){
382 </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">);
384 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.callback</span><span class="jsdoc-syntax">){
385 </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">);
387 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
389 </span><span class="jsdoc-comment">// if data returned failure - throw an exception.
390 </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">) {
391 </span><span class="jsdoc-comment">// show a message if no listener is registered.
392 </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">) {
393 </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">);
395 </span><span class="jsdoc-comment">// loadmask wil be hooked into this..
396 </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">);
397 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
399 </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">;
401 </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">);
403 </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">){
404 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pruneModifiedRecords</span><span class="jsdoc-syntax">){
405 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
407 </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">++){
408 </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">);
410 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">){
411 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
412 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
414 </span><span class="jsdoc-var">this.data.clear</span><span class="jsdoc-syntax">();
415 </span><span class="jsdoc-var">this.data.addAll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
416 </span><span class="jsdoc-var">this.totalLength </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">;
417 </span><span class="jsdoc-var">this.applySort</span><span class="jsdoc-syntax">();
418 </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">);
419 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
420 </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">);
421 </span><span class="jsdoc-var">this.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
424 </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">) {
426 </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">({});
428 </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">);
429 </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">);
431 </span><span class="jsdoc-var">this.insert</span><span class="jsdoc-syntax">(0, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
434 </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">);
435 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.callback</span><span class="jsdoc-syntax">){
436 </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">);
441 </span><span class="jsdoc-comment">/**
442 * Loads data from a passed data block. A Reader which understands the format of the data
443 * must have been configured in the constructor.
444 * @param {Object} data The data block from which to read the Records. The format of the data expected
445 * is dependent on the type of Reader that is configured and should correspond to that Reader's readRecords parameter.
446 * @param {Boolean} append (Optional) True to append the new Records rather than replace the existing cache.
448 </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">){
449 </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">);
450 </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">);
453 </span><span class="jsdoc-comment">/**
454 * Gets the number of cached records.
456 * <em>If using paging, this may not be the total size of the dataset. If the data object
457 * used by the Reader contains the dataset size, then the getTotalCount() function returns
458 * the data set size</em>
460 </span><span class="jsdoc-var">getCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
461 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.length </span><span class="jsdoc-syntax">|| 0;
464 </span><span class="jsdoc-comment">/**
465 * Gets the total number of records in the dataset as returned by the server.
467 * <em>If using paging, for this to be accurate, the data object used by the Reader must contain
468 * the dataset size</em>
470 </span><span class="jsdoc-var">getTotalCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
471 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.totalLength </span><span class="jsdoc-syntax">|| 0;
474 </span><span class="jsdoc-comment">/**
475 * Returns the sort state of the Store as an object with two properties:
476 * <pre><code>
477 field {String} The name of the field by which the Records are sorted
478 direction {String} The sort order, "ASC" or "DESC"
479 * </code></pre>
481 </span><span class="jsdoc-var">getSortState </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
482 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.sortInfo</span><span class="jsdoc-syntax">;
485 </span><span class="jsdoc-comment">// private
486 </span><span class="jsdoc-var">applySort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
487 </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">){
488 </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">;
489 </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">;
490 </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">){
491 </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">]);
492 </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);
494 </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">);
495 </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">){
496 </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">);
501 </span><span class="jsdoc-comment">/**
502 * Sets the default sort column and order to be used by the next load operation.
503 * @param {String} fieldName The name of the field to sort by.
504 * @param {String} dir (optional) The sort order, "ASC" or "DESC" (defaults to "ASC")
506 </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">){
507 </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">};
510 </span><span class="jsdoc-comment">/**
512 * If remote sorting is used, the sort is performed on the server, and the cache is
513 * reloaded. If local sorting is used, the cache is sorted internally.
514 * @param {String} fieldName The name of the field to sort by.
515 * @param {String} dir (optional) The sort order, "ASC" or "DESC" (defaults to "ASC")
517 </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">){
518 </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">);
519 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">){
520 </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">;
522 </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
523 </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">);
524 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
525 </span><span class="jsdoc-var">dir </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">f.sortDir</span><span class="jsdoc-syntax">;
528 </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">;
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">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">};
530 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.remoteSort</span><span class="jsdoc-syntax">){
531 </span><span class="jsdoc-var">this.applySort</span><span class="jsdoc-syntax">();
532 </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">);
533 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
534 </span><span class="jsdoc-var">this.load</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.lastOptions</span><span class="jsdoc-syntax">);
538 </span><span class="jsdoc-comment">/**
539 * Calls the specified function for each of the Records in the cache.
540 * @param {Function} fn The function to call. The Record is passed as the first parameter.
541 * Returning <em>false</em> aborts and exits the iteration.
542 * @param {Object} scope (optional) The scope in which to call the function (defaults to the Record).
544 </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">){
545 </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">);
548 </span><span class="jsdoc-comment">/**
549 * Gets all records modified since the last commit. Modified records are persisted across load operations
550 * (e.g., during paging).
551 * @return {Roo.data.Record[]} An array of Records containing outstanding modifications.
553 </span><span class="jsdoc-var">getModifiedRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
554 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.modified</span><span class="jsdoc-syntax">;
557 </span><span class="jsdoc-comment">// private
558 </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">){
559 </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
560 </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">);
561 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value.length </span><span class="jsdoc-syntax">== 0){
562 </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
564 </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">);
566 </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
567 </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">]);
571 </span><span class="jsdoc-comment">/**
572 * Sums the value of <i>property</i> for each record between start and end and returns the result.
573 * @param {String} property A field on your records
574 * @param {Number} start The record index to start at (defaults to 0)
575 * @param {Number} end The last record index to include (defaults to length - 1)
576 * @return {Number} The sum
578 </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">){
579 </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;
580 </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">|| 0;
581 </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;
583 </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">++){
584 </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);
586 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
589 </span><span class="jsdoc-comment">/**
590 * Filter the records by a specified property.
591 * @param {String} field A field on your records
592 * @param {String/RegExp} value Either a string that the field
593 * should start with or a RegExp to test against the field
594 * @param {Boolean} anyMatch True to match any part not just the beginning
596 </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">){
597 </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">);
598 </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">();
601 </span><span class="jsdoc-comment">/**
602 * Filter by a function. The specified function will be called with each
603 * record in this data source. If the function returns true the record is included,
604 * otherwise it is filtered.
605 * @param {Function} fn The function to be called, it will receive 2 args (record, id)
606 * @param {Object} scope (optional) The scope of the function (defaults to this)
608 </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">){
609 </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">;
610 </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">);
611 </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">);
614 </span><span class="jsdoc-comment">/**
615 * Query the records by a specified property.
616 * @param {String} field A field on your records
617 * @param {String/RegExp} value Either a string that the field
618 * should start with or a RegExp to test against the field
619 * @param {Boolean} anyMatch True to match any part not just the beginning
620 * @return {MixedCollection} Returns an Roo.util.MixedCollection of the matched records
622 </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">){
623 </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">);
624 </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">();
627 </span><span class="jsdoc-comment">/**
628 * Query by a function. The specified function will be called with each
629 * record in this data source. If the function returns true the record is included
631 * @param {Function} fn The function to be called, it will receive 2 args (record, id)
632 * @param {Object} scope (optional) The scope of the function (defaults to this)
633 @return {MixedCollection} Returns an Roo.util.MixedCollection of the matched records
635 </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">){
636 </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">;
637 </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">);
640 </span><span class="jsdoc-comment">/**
641 * Collects unique values for a particular dataIndex from this store.
642 * @param {String} dataIndex The property to collect
643 * @param {Boolean} allowNull (optional) Pass true to allow null, undefined or empty string values
644 * @param {Boolean} bypassFilter (optional) Pass true to collect from all records, even ones which are filtered
645 * @return {Array} An array of the unique values
647 </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">){
648 </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">) ?
649 </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">;
650 </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">= {};
651 </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">++){
652 </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">];
653 </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">);
654 </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">]){
655 </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">;
656 </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">;
659 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">;
662 </span><span class="jsdoc-comment">/**
663 * Revert to a view of the Record cache with no filtering applied.
664 * @param {Boolean} suppressEvent If true the filter is cleared silently without notifying listeners
666 </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">){
667 </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">){
668 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
669 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
670 </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">){
671 </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">);
676 </span><span class="jsdoc-comment">// private
677 </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">){
678 </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){
679 </span><span class="jsdoc-var">this.modified.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
681 </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">);
684 </span><span class="jsdoc-comment">// private
685 </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">){
686 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
687 </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">);
690 </span><span class="jsdoc-comment">// private
691 </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">){
692 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
693 </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">);
696 </span><span class="jsdoc-comment">/**
697 * Commit all Records with outstanding changes. To handle updates for changes, subscribe to the
698 * Store's "update" event, and perform updating when the third parameter is Roo.data.Record.COMMIT.
700 </span><span class="jsdoc-var">commitChanges </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
701 </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);
702 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
703 </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">++){
704 </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">();
708 </span><span class="jsdoc-comment">/**
709 * Cancel outstanding changes on all changed records.
711 </span><span class="jsdoc-var">rejectChanges </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
712 </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);
713 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
714 </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">++){
715 </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">();
719 </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">){
720 </span><span class="jsdoc-var">this.recordType </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">rtype</span><span class="jsdoc-syntax">;
721 </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">;
722 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
723 </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">;
724 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
725 </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">);
728 </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">)
730 </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">);
732 </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">;
734 </span><span class="jsdoc-var">this.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">);
736 </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">);
739 });</span></code></body></html>