📄 combo.js
字号:
/*
* Ext JS Library 2.0.2
* Copyright(c) 2006-2008, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
/** * @class Ext.form.ComboBox * @extends Ext.form.TriggerField * A combobox control with support for autocomplete, remote-loading, paging and many other features. * @constructor * Create a new ComboBox. * @param {Object} config Configuration options */Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, { /** * @cfg {Mixed} transform The id, DOM node or element of an existing HTML SELECT to convert to a ComboBox. * Note that if you specify this and the combo is going to be in a {@link Ext.form.BasicForm} or * {@link Ext.form.FormPanel}, you must also set {@link #lazyRender} = true. */ /** * @cfg {Boolean} lazyRender True to prevent the ComboBox from rendering until requested (should always be used when * rendering into an Ext.Editor, defaults to false). */ /** * @cfg {Boolean/Object} autoCreate A DomHelper element spec, or true for a default element spec (defaults to: * {tag: "input", type: "text", size: "24", autocomplete: "off"}) */ /** * @cfg {Ext.data.Store} store The data store to which this combo is bound (defaults to undefined) */ /** * @cfg {String} title If supplied, a header element is created containing this text and added into the top of * the dropdown list (defaults to undefined, with no header element) */ // private defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"}, /** * @cfg {Number} listWidth The width in pixels of the dropdown list (defaults to the width of the ComboBox field) */ /** * @cfg {String} displayField The underlying data field name to bind to this ComboBox (defaults to undefined if * mode = 'remote' or 'text' if transforming a select) */ /** * @cfg {String} valueField The underlying data value name to bind to this ComboBox (defaults to undefined if * mode = 'remote' or 'value' if transforming a select) Note: use of a valueField requires the user to make a selection * in order for a value to be mapped. */ /** * @cfg {String} hiddenName If specified, a hidden form field with this name is dynamically generated to store the * field's data value (defaults to the underlying DOM element's name). Required for the combo's value to automatically * post during a form submission. */ /** * @cfg {String} hiddenId If {@link #hiddenName} is specified, hiddenId can also be provided to give the hidden field * a unique id (defaults to the hiddenName). The hiddenId and combo {@link #id} should be different, since no two DOM * nodes should share the same id. */ /** * @cfg {String} listClass CSS class to apply to the dropdown list element (defaults to '') */ listClass: '', /** * @cfg {String} selectedClass CSS class to apply to the selected item in the dropdown list (defaults to 'x-combo-selected') */ selectedClass: 'x-combo-selected', /** * @cfg {String} triggerClass An additional CSS class used to style the trigger button. The trigger will always get the * class 'x-form-trigger' and triggerClass will be <b>appended</b> if specified (defaults to 'x-form-arrow-trigger' * which displays a downward arrow icon). */ triggerClass : 'x-form-arrow-trigger', /** * @cfg {Boolean/String} shadow True or "sides" for the default effect, "frame" for 4-way shadow, and "drop" for bottom-right */ shadow:'sides', /** * @cfg {String} listAlign A valid anchor position value. See {@link Ext.Element#alignTo} for details on supported * anchor positions (defaults to 'tl-bl') */ listAlign: 'tl-bl?', /** * @cfg {Number} maxHeight The maximum height in pixels of the dropdown list before scrollbars are shown (defaults to 300) */ maxHeight: 300, /** * @cfg {Number} minHeight The minimum height in pixels of the dropdown list when the list is constrained by its * distance to the viewport edges (defaults to 90) */ minHeight: 90, /** * @cfg {String} triggerAction The action to execute when the trigger field is activated. Use 'all' to run the * query specified by the allQuery config option (defaults to 'query') */ triggerAction: 'query', /** * @cfg {Number} minChars The minimum number of characters the user must type before autocomplete and typeahead activate * (defaults to 4 if remote or 0 if local, does not apply if editable = false) */ minChars : 4, /** * @cfg {Boolean} typeAhead True to populate and autoselect the remainder of the text being typed after a configurable * delay (typeAheadDelay) if it matches a known value (defaults to false) */ typeAhead: false, /** * @cfg {Number} queryDelay The length of time in milliseconds to delay between the start of typing and sending the * query to filter the dropdown list (defaults to 500 if mode = 'remote' or 10 if mode = 'local') */ queryDelay: 500, /** * @cfg {Number} pageSize If greater than 0, a paging toolbar is displayed in the footer of the dropdown list and the * filter queries will execute with page start and limit parameters. Only applies when mode = 'remote' (defaults to 0) */ pageSize: 0, /** * @cfg {Boolean} selectOnFocus True to select any existing text in the field immediately on focus. Only applies * when editable = true (defaults to false) */ selectOnFocus:false, /** * @cfg {String} queryParam Name of the query as it will be passed on the querystring (defaults to 'query') */ queryParam: 'query', /** * @cfg {String} loadingText The text to display in the dropdown list while data is loading. Only applies * when mode = 'remote' (defaults to 'Loading...') */ loadingText: 'Loading...', /** * @cfg {Boolean} resizable True to add a resize handle to the bottom of the dropdown list (defaults to false) */ resizable: false, /** * @cfg {Number} handleHeight The height in pixels of the dropdown list resize handle if resizable = true (defaults to 8) */ handleHeight : 8, /** * @cfg {Boolean} editable False to prevent the user from typing text directly into the field, just like a * traditional select (defaults to true) */ editable: true, /** * @cfg {String} allQuery The text query to send to the server to return all records for the list with no filtering (defaults to '') */ allQuery: '', /** * @cfg {String} mode Set to 'local' if the ComboBox loads local data (defaults to 'remote' which loads from the server) */ mode: 'remote', /** * @cfg {Number} minListWidth The minimum width of the dropdown list in pixels (defaults to 70, will be ignored if * listWidth has a higher value) */ minListWidth : 70, /** * @cfg {Boolean} forceSelection True to restrict the selected value to one of the values in the list, false to * allow the user to set arbitrary text into the field (defaults to false) */ forceSelection:false, /** * @cfg {Number} typeAheadDelay The length of time in milliseconds to wait until the typeahead text is displayed * if typeAhead = true (defaults to 250) */ typeAheadDelay : 250, /** * @cfg {String} valueNotFoundText When using a name/value combo, if the value passed to setValue is not found in * the store, valueNotFoundText will be displayed as the field text if defined (defaults to undefined) */ /** * @cfg {Boolean} lazyInit True to not initialize the list for this combo until the field is focused. (defaults to true) */ lazyInit : true, initComponent : function(){ Ext.form.ComboBox.superclass.initComponent.call(this); this.addEvents( /** * @event expand * Fires when the dropdown list is expanded * @param {Ext.form.ComboBox} combo This combo box */ 'expand', /** * @event collapse * Fires when the dropdown list is collapsed * @param {Ext.form.ComboBox} combo This combo box */ 'collapse', /** * @event beforeselect * Fires before a list item is selected. Return false to cancel the selection. * @param {Ext.form.ComboBox} combo This combo box * @param {Ext.data.Record} record The data record returned from the underlying store * @param {Number} index The index of the selected item in the dropdown list */ 'beforeselect', /** * @event select * Fires when a list item is selected * @param {Ext.form.ComboBox} combo This combo box * @param {Ext.data.Record} record The data record returned from the underlying store * @param {Number} index The index of the selected item in the dropdown list */ 'select', /** * @event beforequery * Fires before all queries are processed. Return false to cancel the query or set the queryEvent's * cancel property to true. * @param {Object} queryEvent An object that has these properties:<ul> * <li><code>combo</code> : Ext.form.ComboBox <div class="sub-desc">This combo box</div></li> * <li><code>query</code> : String <div class="sub-desc">The query</div></li> * <li><code>forceAll</code> : Boolean <div class="sub-desc">True to force "all" query</div></li> * <li><code>cancel</code> : Boolean <div class="sub-desc">Set to true to cancel the query</div></li> * </ul> */ 'beforequery' ); if(this.transform){ this.allowDomMove = false; var s = Ext.getDom(this.transform); if(!this.hiddenName){ this.hiddenName = s.name; } if(!this.store){ this.mode = 'local'; var d = [], opts = s.options; for(var i = 0, len = opts.length;i < len; i++){ var o = opts[i]; var value = (Ext.isIE ? o.getAttributeNode('value').specified : o.hasAttribute('value')) ? o.value : o.text; if(o.selected) { this.value = value; } d.push([value, o.text]); } this.store = new Ext.data.SimpleStore({ 'id': 0, fields: ['value', 'text'], data : d }); this.valueField = 'value'; this.displayField = 'text'; } s.name = Ext.id(); // wipe out the name in case somewhere else they have a reference if(!this.lazyRender){ this.target = true; this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate); Ext.removeNode(s); // remove it this.render(this.el.parentNode); }else{ Ext.removeNode(s); // remove it } } this.selectedIndex = -1; if(this.mode == 'local'){ if(this.initialConfig.queryDelay === undefined){ this.queryDelay = 10; } if(this.initialConfig.minChars === undefined){ this.minChars = 0; } } }, // private onRender : function(ct, position){ Ext.form.ComboBox.superclass.onRender.call(this, ct, position); if(this.hiddenName){ this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: (this.hiddenId||this.hiddenName)}, 'before', true); this.hiddenField.value = this.hiddenValue !== undefined ? this.hiddenValue : this.value !== undefined ? this.value : ''; // prevent input submission this.el.dom.removeAttribute('name'); } if(Ext.isGecko){ this.el.dom.setAttribute('autocomplete', 'off'); } if(!this.lazyInit){ this.initList(); }else{ this.on('focus', this.initList, this, {single: true}); } if(!this.editable){ this.editable = true; this.setEditable(false); } }, initList : function(){ if(!this.list){ var cls = 'x-combo-list'; this.list = new Ext.Layer({ shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false }); var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth); this.list.setWidth(lw); this.list.swallowEvent('mousewheel'); this.assetHeight = 0; if(this.title){ this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -