1 <html><head><title>/home/edward/gitlive/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">);
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>callback {Function} A function to be called after the Records have been loaded. The callback is
336 * passed the following arguments:<ul>
337 * <li>r : Roo.data.Record[]</li>
338 * <li>options: Options object from the load call</li>
339 * <li>success: Boolean success indicator</li></ul></li>
340 * <li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>
341 * <li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>
344 </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">){
345 </span><span class="jsdoc-var">options </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">options </span><span class="jsdoc-syntax">|| {};
346 </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">){
347 </span><span class="jsdoc-var">this.storeOptions</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options</span><span class="jsdoc-syntax">);
348 </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">);
349 </span><span class="jsdoc-comment">// if meta was not loaded from remote source.. try requesting it.
350 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.reader.metaFromRemote</span><span class="jsdoc-syntax">) {
351 </span><span class="jsdoc-var">p._requestMeta </span><span class="jsdoc-syntax">= 1;
353 </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">){
354 </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">;
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">"sort"</span><span class="jsdoc-syntax">]] = </span><span class="jsdoc-var">this.sortInfo.field</span><span class="jsdoc-syntax">;
356 </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">;
358 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.multiSort</span><span class="jsdoc-syntax">) {
359 </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">;
360 </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">});
363 </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">);
367 </span><span class="jsdoc-comment">/**
368 * Reloads the Record cache from the configured Proxy using the configured Reader and
369 * the options from the last load operation performed.
370 * @param {Object} options (optional) An object containing properties which may override the options
371 * used in the last load operation. See {@link #load} for details (defaults to null, in which case
372 * the most recently used options are reused).
374 </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">){
375 </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">));
378 </span><span class="jsdoc-comment">// private
379 // Called as a callback by the Reader during a load operation.
380 </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">){
381 </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">){
382 </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">){
383 </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">);
385 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.callback</span><span class="jsdoc-syntax">){
386 </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">);
388 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
390 </span><span class="jsdoc-comment">// if data returned failure - throw an exception.
391 </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">) {
392 </span><span class="jsdoc-comment">// show a message if no listener is registered.
393 </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">) {
394 </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">);
396 </span><span class="jsdoc-comment">// loadmask wil be hooked into this..
397 </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">);
398 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
400 </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">;
402 </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">);
404 </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">){
405 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pruneModifiedRecords</span><span class="jsdoc-syntax">){
406 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
408 </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">++){
409 </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">);
411 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">){
412 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
413 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
415 </span><span class="jsdoc-var">this.data.clear</span><span class="jsdoc-syntax">();
416 </span><span class="jsdoc-var">this.data.addAll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
417 </span><span class="jsdoc-var">this.totalLength </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">;
418 </span><span class="jsdoc-var">this.applySort</span><span class="jsdoc-syntax">();
419 </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">);
420 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
421 </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">);
422 </span><span class="jsdoc-var">this.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
425 </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">) {
427 </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">({});
429 </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">);
430 </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">);
432 </span><span class="jsdoc-var">this.insert</span><span class="jsdoc-syntax">(0, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
435 </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">);
436 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.callback</span><span class="jsdoc-syntax">){
437 </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">);
442 </span><span class="jsdoc-comment">/**
443 * Loads data from a passed data block. A Reader which understands the format of the data
444 * must have been configured in the constructor.
445 * @param {Object} data The data block from which to read the Records. The format of the data expected
446 * is dependent on the type of Reader that is configured and should correspond to that Reader's readRecords parameter.
447 * @param {Boolean} append (Optional) True to append the new Records rather than replace the existing cache.
449 </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">){
450 </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">);
451 </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">);
454 </span><span class="jsdoc-comment">/**
455 * Gets the number of cached records.
457 * <em>If using paging, this may not be the total size of the dataset. If the data object
458 * used by the Reader contains the dataset size, then the getTotalCount() function returns
459 * the data set size</em>
461 </span><span class="jsdoc-var">getCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
462 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.data.length </span><span class="jsdoc-syntax">|| 0;
465 </span><span class="jsdoc-comment">/**
466 * Gets the total number of records in the dataset as returned by the server.
468 * <em>If using paging, for this to be accurate, the data object used by the Reader must contain
469 * the dataset size</em>
471 </span><span class="jsdoc-var">getTotalCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
472 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.totalLength </span><span class="jsdoc-syntax">|| 0;
475 </span><span class="jsdoc-comment">/**
476 * Returns the sort state of the Store as an object with two properties:
477 * <pre><code>
478 field {String} The name of the field by which the Records are sorted
479 direction {String} The sort order, "ASC" or "DESC"
480 * </code></pre>
482 </span><span class="jsdoc-var">getSortState </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.sortInfo</span><span class="jsdoc-syntax">;
486 </span><span class="jsdoc-comment">// private
487 </span><span class="jsdoc-var">applySort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
488 </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">){
489 </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">;
490 </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">;
491 </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">){
492 </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">]);
493 </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);
495 </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">);
496 </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">){
497 </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">);
502 </span><span class="jsdoc-comment">/**
503 * Sets the default sort column and order to be used by the next load operation.
504 * @param {String} fieldName The name of the field to sort by.
505 * @param {String} dir (optional) The sort order, "ASC" or "DESC" (defaults to "ASC")
507 </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">){
508 </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">};
511 </span><span class="jsdoc-comment">/**
513 * If remote sorting is used, the sort is performed on the server, and the cache is
514 * reloaded. If local sorting is used, the cache is sorted internally.
515 * @param {String} fieldName The name of the field to sort by.
516 * @param {String} dir (optional) The sort order, "ASC" or "DESC" (defaults to "ASC")
518 </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">){
519 </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">);
520 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">){
521 </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">;
523 </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
524 </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">);
525 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
526 </span><span class="jsdoc-var">dir </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">f.sortDir</span><span class="jsdoc-syntax">;
529 </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">;
530 </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">};
531 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.remoteSort</span><span class="jsdoc-syntax">){
532 </span><span class="jsdoc-var">this.applySort</span><span class="jsdoc-syntax">();
533 </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">);
534 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
535 </span><span class="jsdoc-var">this.load</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.lastOptions</span><span class="jsdoc-syntax">);
539 </span><span class="jsdoc-comment">/**
540 * Calls the specified function for each of the Records in the cache.
541 * @param {Function} fn The function to call. The Record is passed as the first parameter.
542 * Returning <em>false</em> aborts and exits the iteration.
543 * @param {Object} scope (optional) The scope in which to call the function (defaults to the Record).
545 </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">){
546 </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">);
549 </span><span class="jsdoc-comment">/**
550 * Gets all records modified since the last commit. Modified records are persisted across load operations
551 * (e.g., during paging).
552 * @return {Roo.data.Record[]} An array of Records containing outstanding modifications.
554 </span><span class="jsdoc-var">getModifiedRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
555 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.modified</span><span class="jsdoc-syntax">;
558 </span><span class="jsdoc-comment">// private
559 </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">){
560 </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
561 </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">);
562 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value.length </span><span class="jsdoc-syntax">== 0){
563 </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
565 </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">);
567 </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
568 </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">]);
572 </span><span class="jsdoc-comment">/**
573 * Sums the value of <i>property</i> for each record between start and end and returns the result.
574 * @param {String} property A field on your records
575 * @param {Number} start The record index to start at (defaults to 0)
576 * @param {Number} end The last record index to include (defaults to length - 1)
577 * @return {Number} The sum
579 </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">){
580 </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;
581 </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">|| 0;
582 </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;
584 </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">++){
585 </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);
587 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
590 </span><span class="jsdoc-comment">/**
591 * Filter the records by a specified property.
592 * @param {String} field A field on your records
593 * @param {String/RegExp} value Either a string that the field
594 * should start with or a RegExp to test against the field
595 * @param {Boolean} anyMatch True to match any part not just the beginning
597 </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">){
598 </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">);
599 </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">();
602 </span><span class="jsdoc-comment">/**
603 * Filter by a function. The specified function will be called with each
604 * record in this data source. If the function returns true the record is included,
605 * otherwise it is filtered.
606 * @param {Function} fn The function to be called, it will receive 2 args (record, id)
607 * @param {Object} scope (optional) The scope of the function (defaults to this)
609 </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">){
610 </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">;
611 </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">);
612 </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">);
615 </span><span class="jsdoc-comment">/**
616 * Query the records by a specified property.
617 * @param {String} field A field on your records
618 * @param {String/RegExp} value Either a string that the field
619 * should start with or a RegExp to test against the field
620 * @param {Boolean} anyMatch True to match any part not just the beginning
621 * @return {MixedCollection} Returns an Roo.util.MixedCollection of the matched records
623 </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">){
624 </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">);
625 </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">();
628 </span><span class="jsdoc-comment">/**
629 * Query by a function. The specified function will be called with each
630 * record in this data source. If the function returns true the record is included
632 * @param {Function} fn The function to be called, it will receive 2 args (record, id)
633 * @param {Object} scope (optional) The scope of the function (defaults to this)
634 @return {MixedCollection} Returns an Roo.util.MixedCollection of the matched records
636 </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">){
637 </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">;
638 </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">);
641 </span><span class="jsdoc-comment">/**
642 * Collects unique values for a particular dataIndex from this store.
643 * @param {String} dataIndex The property to collect
644 * @param {Boolean} allowNull (optional) Pass true to allow null, undefined or empty string values
645 * @param {Boolean} bypassFilter (optional) Pass true to collect from all records, even ones which are filtered
646 * @return {Array} An array of the unique values
648 </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">){
649 </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">) ?
650 </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">;
651 </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">= {};
652 </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">++){
653 </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">];
654 </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">);
655 </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">]){
656 </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">;
657 </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">;
660 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">;
663 </span><span class="jsdoc-comment">/**
664 * Revert to a view of the Record cache with no filtering applied.
665 * @param {Boolean} suppressEvent If true the filter is cleared silently without notifying listeners
667 </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">){
668 </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">){
669 </span><span class="jsdoc-var">this.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
670 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
671 </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">){
672 </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">);
677 </span><span class="jsdoc-comment">// private
678 </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">){
679 </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){
680 </span><span class="jsdoc-var">this.modified.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
682 </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">);
685 </span><span class="jsdoc-comment">// private
686 </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">){
687 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
688 </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">);
691 </span><span class="jsdoc-comment">// private
692 </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">){
693 </span><span class="jsdoc-var">this.modified.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
694 </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">);
697 </span><span class="jsdoc-comment">/**
698 * Commit all Records with outstanding changes. To handle updates for changes, subscribe to the
699 * Store's "update" event, and perform updating when the third parameter is Roo.data.Record.COMMIT.
701 </span><span class="jsdoc-var">commitChanges </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
702 </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);
703 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
704 </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">++){
705 </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">();
709 </span><span class="jsdoc-comment">/**
710 * Cancel outstanding changes on all changed records.
712 </span><span class="jsdoc-var">rejectChanges </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
713 </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);
714 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
715 </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">++){
716 </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">();
720 </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">){
721 </span><span class="jsdoc-var">this.recordType </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">rtype</span><span class="jsdoc-syntax">;
722 </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">;
723 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.snapshot</span><span class="jsdoc-syntax">;
724 </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">;
725 </span><span class="jsdoc-var">this.modified </span><span class="jsdoc-syntax">= [];
726 </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">);
729 </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">)
731 </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">);
733 </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">;
735 </span><span class="jsdoc-var">this.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">);
737 </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">);
740 });</span></code></body></html>