📄 mixedcollection.js
字号:
return this.removeAt(this.indexOfKey(key)); },/** * Returns the number of items in the collection. * @return {Number} the number of items in the collection. */ getCount : function(){ return this.length; },/** * Returns index within the collection of the passed Object. * @param {Object} o The item to find the index of. * @return {Number} index of the item. */ indexOf : function(o){ return this.items.indexOf(o); },/** * Returns index within the collection of the passed key. * @param {String} key The key to find the index of. * @return {Number} index of the key. */ indexOfKey : function(key){ return this.keys.indexOf(key); },/** * Returns the item associated with the passed key OR index. Key has priority over index. This is the equivalent * of calling {@link #key} first, then if nothing matched calling {@link #itemAt}. * @param {String/Number} key The key or index of the item. * @return {Object} The item associated with the passed key. */ item : function(key){ var item = typeof this.map[key] != "undefined" ? this.map[key] : this.items[key]; return typeof item != 'function' || this.allowFunctions ? item : null; // for prototype! },/** * Returns the item at the specified index. * @param {Number} index The index of the item. * @return {Object} The item at the specified index. */ itemAt : function(index){ return this.items[index]; },/** * Returns the item associated with the passed key. * @param {String/Number} key The key of the item. * @return {Object} The item associated with the passed key. */ key : function(key){ return this.map[key]; },/** * Returns true if the collection contains the passed Object as an item. * @param {Object} o The Object to look for in the collection. * @return {Boolean} True if the collection contains the Object as an item. */ contains : function(o){ return this.indexOf(o) != -1; },/** * Returns true if the collection contains the passed Object as a key. * @param {String} key The key to look for in the collection. * @return {Boolean} True if the collection contains the Object as a key. */ containsKey : function(key){ return typeof this.map[key] != "undefined"; },/** * Removes all items from the collection. Fires the {@link #clear} event when complete. */ clear : function(){ this.length = 0; this.items = []; this.keys = []; this.map = {}; this.fireEvent("clear"); },/** * Returns the first item in the collection. * @return {Object} the first item in the collection.. */ first : function(){ return this.items[0]; },/** * Returns the last item in the collection. * @return {Object} the last item in the collection.. */ last : function(){ return this.items[this.length-1]; }, // private _sort : function(property, dir, fn){ var dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1; fn = fn || function(a, b){ return a-b; }; var c = [], k = this.keys, items = this.items; for(var i = 0, len = items.length; i < len; i++){ c[c.length] = {key: k[i], value: items[i], index: i}; } c.sort(function(a, b){ var v = fn(a[property], b[property]) * dsc; if(v == 0){ v = (a.index < b.index ? -1 : 1); } return v; }); for(var i = 0, len = c.length; i < len; i++){ items[i] = c[i].value; k[i] = c[i].key; } this.fireEvent("sort", this); }, /** * Sorts this collection with the passed comparison function * @param {String} direction (optional) "ASC" or "DESC" * @param {Function} fn (optional) comparison function */ sort : function(dir, fn){ this._sort("value", dir, fn); }, /** * Sorts this collection by keys * @param {String} direction (optional) "ASC" or "DESC" * @param {Function} fn (optional) a comparison function (defaults to case insensitive string) */ keySort : function(dir, fn){ this._sort("key", dir, fn || function(a, b){ return String(a).toUpperCase()-String(b).toUpperCase(); }); }, /** * Returns a range of items in this collection * @param {Number} startIndex (optional) defaults to 0 * @param {Number} endIndex (optional) default to the last item * @return {Array} An array of items */ getRange : function(start, end){ var items = this.items; if(items.length < 1){ return []; } start = start || 0; end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1); var r = []; if(start <= end){ for(var i = start; i <= end; i++) { r[r.length] = items[i]; } }else{ for(var i = start; i >= end; i--) { r[r.length] = items[i]; } } return r; }, /** * Filter the <i>objects</i> in this collection by a specific property. * Returns a new collection that has been filtered. * @param {String} property A property on your objects * @param {String/RegExp} value Either string that the property values * should start with or a RegExp to test against the property * @param {Boolean} anyMatch (optional) True to match any part of the string, not just the beginning * @param {Boolean} caseSensitive (optional) True for case sensitive comparison (defaults to False). * @return {MixedCollection} The new filtered collection */ filter : function(property, value, anyMatch, caseSensitive){ if(Ext.isEmpty(value, false)){ return this.clone(); } value = this.createValueMatcher(value, anyMatch, caseSensitive); return this.filterBy(function(o){ return o && value.test(o[property]); }); }, /** * Filter by a function. Returns a <i>new</i> collection that has been filtered. * The passed function will be called with each object in the collection. * If the function returns true, the value is included otherwise it is filtered. * @param {Function} fn The function to be called, it will receive the args o (the object), k (the key) * @param {Object} scope (optional) The scope of the function (defaults to this) * @return {MixedCollection} The new filtered collection */ filterBy : function(fn, scope){ var r = new Ext.util.MixedCollection(); r.getKey = this.getKey; var k = this.keys, it = this.items; for(var i = 0, len = it.length; i < len; i++){ if(fn.call(scope||this, it[i], k[i])){ r.add(k[i], it[i]); } } return r; }, /** * Finds the index of the first matching object in this collection by a specific property/value. * @param {String} property The name of a property on your objects. * @param {String/RegExp} value A string that the property values * should start with or a RegExp to test against the property. * @param {Number} start (optional) The index to start searching at (defaults to 0). * @param {Boolean} anyMatch (optional) True to match any part of the string, not just the beginning. * @param {Boolean} caseSensitive (optional) True for case sensitive comparison. * @return {Number} The matched index or -1 */ findIndex : function(property, value, start, anyMatch, caseSensitive){ if(Ext.isEmpty(value, false)){ return -1; } value = this.createValueMatcher(value, anyMatch, caseSensitive); return this.findIndexBy(function(o){ return o && value.test(o[property]); }, null, start); }, /** * Find the index of the first matching object in this collection by a function. * If the function returns <i>true</i> it is considered a match. * @param {Function} fn The function to be called, it will receive the args o (the object), k (the key). * @param {Object} scope (optional) The scope of the function (defaults to this). * @param {Number} start (optional) The index to start searching at (defaults to 0). * @return {Number} The matched index or -1 */ findIndexBy : function(fn, scope, start){ var k = this.keys, it = this.items; for(var i = (start||0), len = it.length; i < len; i++){ if(fn.call(scope||this, it[i], k[i])){ return i; } } if(typeof start == 'number' && start > 0){ for(var i = 0; i < start; i++){ if(fn.call(scope||this, it[i], k[i])){ return i; } } } return -1; }, // private createValueMatcher : function(value, anyMatch, caseSensitive){ if(!value.exec){ // not a regex value = String(value); value = new RegExp((anyMatch === true ? '' : '^') + Ext.escapeRe(value), caseSensitive ? '' : 'i'); } return value; }, /** * Creates a duplicate of this collection * @return {MixedCollection} */ clone : function(){ var r = new Ext.util.MixedCollection(); var k = this.keys, it = this.items; for(var i = 0, len = it.length; i < len; i++){ r.add(k[i], it[i]); } r.getKey = this.getKey; return r; }});/** * Returns the item associated with the passed key or index. * @method * @param {String/Number} key The key or index of the item. * @return {Object} The item associated with the passed key. */Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -