📄 store.js
字号:
if(this.snapshot){ this.snapshot.remove(record); } this.fireEvent("remove", this, record, index); }, /** * Remove all Records from the Store and fires the clear event. */ removeAll : function(){ this.data.clear(); if(this.snapshot){ this.snapshot.clear(); } if(this.pruneModifiedRecords){ this.modified = []; } this.fireEvent("clear", this); }, /** * Inserts Records to the Store at the given index and fires the add event. * @param {Number} index The start index at which to insert the passed Records. * @param {Ext.data.Record[]} records An Array of Ext.data.Record objects to add to the cache. */ insert : function(index, records){ records = [].concat(records); for(var i = 0, len = records.length; i < len; i++){ this.data.insert(index, records[i]); records[i].join(this); } this.fireEvent("add", this, records, index); }, /** * Get the index within the cache of the passed Record. * @param {Ext.data.Record} record The Ext.data.Record object to find. * @return {Number} The index of the passed Record. Returns -1 if not found. */ indexOf : function(record){ return this.data.indexOf(record); }, /** * Get the index within the cache of the Record with the passed id. * @param {String} id The id of the Record to find. * @return {Number} The index of the Record. Returns -1 if not found. */ indexOfId : function(id){ return this.data.indexOfKey(id); }, /** * Get the Record with the specified id. * @param {String} id The id of the Record to find. * @return {Ext.data.Record} The Record with the passed id. Returns undefined if not found. */ getById : function(id){ return this.data.key(id); }, /** * Get the Record at the specified index. * @param {Number} index The index of the Record to find. * @return {Ext.data.Record} The Record at the passed index. Returns undefined if not found. */ getAt : function(index){ return this.data.itemAt(index); }, /** * Returns a range of Records between specified indices. * @param {Number} startIndex (optional) The starting index (defaults to 0) * @param {Number} endIndex (optional) The ending index (defaults to the last Record in the Store) * @return {Ext.data.Record[]} An array of Records */ getRange : function(start, end){ return this.data.getRange(start, end); }, // private storeOptions : function(o){ o = Ext.apply({}, o); delete o.callback; delete o.scope; this.lastOptions = o; }, /** * Loads the Record cache from the configured Proxy using the configured Reader. * <p>If using remote paging, then the first load call must specify the <tt>start</tt> * and <tt>limit</tt> properties in the options.params property to establish the initial * position within the dataset, and the number of Records to cache on each read from the Proxy.</p> * <p><b>It is important to note that for remote data sources, loading is asynchronous, * and this call will return before the new data has been loaded. Perform any post-processing * in a callback function, or in a "load" event handler.</b></p> * @param {Object} options An object containing properties which control loading options:<ul> * <li><b>params</b> :Object<p class="sub-desc">An object containing properties to pass as HTTP parameters to a remote data source.</p></li> * <li><b>callback</b> : Function<p class="sub-desc">A function to be called after the Records have been loaded. The callback is * passed the following arguments:<ul> * <li>r : Ext.data.Record[]</li> * <li>options: Options object from the load call</li> * <li>success: Boolean success indicator</li></ul></p></li> * <li><b>scope</b> : Object<p class="sub-desc">Scope with which to call the callback (defaults to the Store object)</p></li> * <li><b>add</b> : Boolean<p class="sub-desc">Indicator to append loaded records rather than replace the current cache.</p></li> * </ul> * @return {Boolean} Whether the load fired (if beforeload failed). */ load : function(options){ options = options || {}; if(this.fireEvent("beforeload", this, options) !== false){ this.storeOptions(options); var p = Ext.apply(options.params || {}, this.baseParams); if(this.sortInfo && this.remoteSort){ var pn = this.paramNames; p[pn["sort"]] = this.sortInfo.field; p[pn["dir"]] = this.sortInfo.direction; } this.proxy.load(p, this.reader, this.loadRecords, this, options); return true; } else { return false; } }, /** * Reloads the Record cache from the configured Proxy using the configured Reader and * the options from the last load operation performed. * @param {Object} options (optional) An object containing properties which may override the options * used in the last load operation. See {@link #load} for details (defaults to null, in which case * the most recently used options are reused). */ reload : function(options){ this.load(Ext.applyIf(options||{}, this.lastOptions)); }, // private // Called as a callback by the Reader during a load operation. loadRecords : function(o, options, success){ if(!o || success === false){ if(success !== false){ this.fireEvent("load", this, [], options); } if(options.callback){ options.callback.call(options.scope || this, [], options, false); } return; } var r = o.records, t = o.totalRecords || r.length; if(!options || options.add !== true){ if(this.pruneModifiedRecords){ this.modified = []; } for(var i = 0, len = r.length; i < len; i++){ r[i].join(this); } if(this.snapshot){ this.data = this.snapshot; delete this.snapshot; } this.data.clear(); this.data.addAll(r); this.totalLength = t; this.applySort(); this.fireEvent("datachanged", this); }else{ this.totalLength = Math.max(t, this.data.length+r.length); this.add(r); } this.fireEvent("load", this, r, options); if(options.callback){ options.callback.call(options.scope || this, r, options, true); } }, /** * Loads data from a passed data block. A Reader which understands the format of the data * must have been configured in the constructor. * @param {Object} data The data block from which to read the Records. The format of the data expected * is dependent on the type of Reader that is configured and should correspond to that Reader's readRecords parameter. * @param {Boolean} append (Optional) True to append the new Records rather than replace the existing cache. */ loadData : function(o, append){ var r = this.reader.readRecords(o); this.loadRecords(r, {add: append}, true); }, /** * Gets the number of cached records. * <p>If using paging, this may not be the total size of the dataset. If the data object * used by the Reader contains the dataset size, then the {@link #getTotalCount} function returns * the dataset size.</p> * @return {Number} The number of Records in the Store's cache. */ getCount : function(){ return this.data.length || 0; }, /** * Gets the total number of records in the dataset as returned by the server. * <p>If using paging, for this to be accurate, the data object used by the Reader must contain * the dataset size. For remote data sources, this is provided by a query on the server.</p> * @return {Number} The number of Records as specified in the data object passed to the Reader * by the Proxy * <p><b>This value is not updated when changing the contents of the Store locally.</b></p> */ getTotalCount : function(){ return this.totalLength || 0; }, /** * Returns an object describing the current sort state of this Store. * @return {Object} The sort state of the Store. An object with two properties:<ul> * <li><b>field : String<p class="sub-desc">The name of the field by which the Records are sorted.</p></li> * <li><b>direction : String<p class="sub-desc">The sort order, "ASC" or "DESC" (case-sensitive).</p></li> * </ul> */ getSortState : function(){ return this.sortInfo; }, // private applySort : function(){ if(this.sortInfo && !this.remoteSort){ var s = this.sortInfo, f = s.field; this.sortData(f, s.direction); } }, // private sortData : function(f, direction){ direction = direction || 'ASC'; var st = this.fields.get(f).sortType; var fn = function(r1, r2){ var v1 = st(r1.data[f]), v2 = st(r2.data[f]); return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0); }; this.data.sort(direction, fn); if(this.snapshot && this.snapshot != this.data){ this.snapshot.sort(direction, fn); } }, /** * Sets the default sort column and order to be used by the next load operation. * @param {String} fieldName The name of the field to sort by. * @param {String} dir (optional) The sort order, "ASC" or "DESC" (case-sensitive, defaults to "ASC") */ setDefaultSort : function(field, dir){ dir = dir ? dir.toUpperCase() : "ASC"; this.sortInfo = {field: field, direction: dir}; this.sortToggle[field] = dir; }, /** * Sort the Records. * If remote sorting is used, the sort is performed on the server, and the cache is * reloaded. If local sorting is used, the cache is sorted internally. * @param {String} fieldName The name of the field to sort by. * @param {String} dir (optional) The sort order, "ASC" or "DESC" (case-sensitive, defaults to "ASC") */ sort : function(fieldName, dir){ var f = this.fields.get(fieldName); if(!f){ return false; } if(!dir){ if(this.sortInfo && this.sortInfo.field == f.name){ // toggle sort dir dir = (this.sortToggle[f.name] || "ASC").toggle("ASC", "DESC"); }else{ dir = f.sortDir;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -