📄 component.js
字号:
</code></pre> */ /** * @cfg {String} xtype * The registered xtype to create. This config option is not used when passing * a config object into a constructor. This config option is used only when * lazy instantiation is being used, and a child item of a Container is being * specified not as a fully instantiated Component, but as a <i>Component config * object</i>. The xtype will be looked up at render time up to determine what * type of child Component to create.<br><br> * The predefined xtypes are listed {@link Ext.Component here}. * <br><br> * If you subclass Components to create your own Components, you may register * them using {@link Ext.ComponentMgr#registerType} in order to be able to * take advantage of lazy instantiation and rendering. */ /** * @cfg {String} cls * An optional extra CSS class that will be added to this component's Element (defaults to ''). This can be * useful for adding customized styles to the component or any of its children using standard CSS rules. */ /** * @cfg {String} overCls * An optional extra CSS class that will be added to this component's Element when the mouse moves * over the Element, and removed when the mouse moves out. (defaults to ''). This can be * useful for adding customized "active" or "hover" styles to the component or any of its children using standard CSS rules. */ /** * @cfg {String} style * A custom style specification to be applied to this component's Element. Should be a valid argument to * {@link Ext.Element#applyStyles}. */ /** * @cfg {String} ctCls * An optional extra CSS class that will be added to this component's container (defaults to ''). This can be * useful for adding customized styles to the container or any of its children using standard CSS rules. */ /** * @cfg {Boolean} disabled * Render this component disabled (default is false). */ /** * @cfg {Boolean} hidden * Render this component hidden (default is false). */ /** * @cfg {Object/Array} plugins * An object or array of objects that will provide custom functionality for this component. The only * requirement for a valid plugin is that it contain an init method that accepts a reference of type Ext.Component. * When a component is created, if any plugins are available, the component will call the init method on each * plugin, passing a reference to itself. Each plugin can then call methods or respond to events on the * component as needed to provide its functionality. */ /** * @cfg {Mixed} applyTo * The id of the element, a DOM element or an existing Element corresponding to a DIV that is already present in * the document that specifies some structural markup for this component. When applyTo is used, constituent parts of * the component can also be specified by id or CSS class name within the main element, and the component being created * may attempt to create its subcomponents from that markup if applicable. Using this config, a call to render() is * not required. If applyTo is specified, any value passed for {@link #renderTo} will be ignored and the target * element's parent node will automatically be used as the component's container. */ /** * @cfg {Mixed} renderTo * <p>The id of the element, a DOM element or an existing Element that this component will be rendered into. * When using this config, a call to render() is not required.<p> * <p>If this Component needs to be managed by a {@link Ext.Container Container}'s * {@link Ext.Component#layout layout manager}, do not use this option. It is the responsiblity * of the Container's layout manager to perform rendering. See {@link #render}.</p> */ /** * @cfg {Boolean} stateful * <p>A flag which causes the Component to attempt to restore the state of internal properties * from a saved state on startup. The component must have either a {@link #stateId} or {@link #id} * assigned for state to be managed. Auto-generated ids are not guaranteed to be stable across page * loads and cannot be relied upon to save and restore the same state for a component.<p> * For state saving to work, the state manager's provider must have been set to an implementation * of {@link Ext.state.Provider} which overrides the {@link Ext.state.Provider#set set} * and {@link Ext.state.Provider#get get} methods to save and recall name/value pairs. * A built-in implementation, {@link Ext.state.CookieProvider} is available.</p> * <p>To set the state provider for the current page:</p> * <pre><code>Ext.state.Manager.setProvider(new Ext.state.CookieProvider());</code></pre> * <p>Components attempt to save state when one of the events listed in the {@link #stateEvents} * configuration fires.</p> * <p>You can perform extra processing on state save and restore by attaching handlers to the * {@link #beforestaterestore}, {@link #staterestore}, {@link #beforestatesave} and {@link #statesave} events</p> */ /** * @cfg {String} stateId * The unique id for this component to use for state management purposes (defaults to the component id if one was * set, otherwise null if the component is using a generated id). * <p>See {@link #stateful} for an explanation of saving and restoring Component state.</p> */ /* //internal - to be set by subclasses * @cfg {Array} stateEvents * An array of events that, when fired, should trigger this component to save its state (defaults to none). * These can be any types of events supported by this component, including browser or custom events (e.g., * ['click', 'customerchange']). * <p>See {@link #stateful} for an explanation of saving and restoring Component state.</p> */ /** * @cfg {String} disabledClass * CSS class added to the component when it is disabled (defaults to "x-item-disabled"). */ disabledClass : "x-item-disabled", /** * @cfg {Boolean} allowDomMove * Whether the component can move the Dom node when rendering (defaults to true). */ allowDomMove : true, /** * @cfg {Boolean} autoShow * True if the component should check for hidden classes (e.g. 'x-hidden' or 'x-hide-display') and remove * them on render (defaults to false). */ autoShow : false, /** * @cfg {String} hideMode * <p>How this component should be hidden. Supported values are "visibility" (css visibility), "offsets" (negative * offset position) and "display" (css display) - defaults to "display".</p> * <p>For Containers which may be hidden and shown as part of a {@link Ext.layout.CardLayout card layout} Container such as a * {@link Ext.TabPanel TabPanel}, it is recommended that hideMode is configured as "offsets". This ensures * that hidden Components still have height and width so that layout managers can perform measurements when * calculating layouts.</p> */ hideMode: 'display', /** * @cfg {Boolean} hideParent * True to hide and show the component's container when hide/show is called on the component, false to hide * and show the component itself (defaults to false). For example, this can be used as a shortcut for a hide * button on a window by setting hide:true on the button when adding it to its parent container. */ hideParent: false, /** * The component's owner {@link Ext.Container} (defaults to undefined, and is set automatically when * the component is added to a container). Read-only. * @type Ext.Container * @property ownerCt */ /** * True if this component is hidden. Read-only. * @type Boolean * @property */ hidden : false, /** * True if this component is disabled. Read-only. * @type Boolean * @property */ disabled : false, /** * True if this component has been rendered. Read-only. * @type Boolean * @property */ rendered : false, // private ctype : "Ext.Component", // private actionMode : "el", // private getActionEl : function(){ return this[this.actionMode]; }, initPlugin : function(p){ p.init(this); return p; }, /* // protected * Function to be implemented by Component subclasses to be part of standard component initialization flow (it is empty by default). * <pre><code>// Traditional constructor:Ext.Foo = function(config){ // call superclass constructor: Ext.Foo.superclass.constructor.call(this, config); this.addEvents({ // add events });};Ext.extend(Ext.Foo, Ext.Bar, { // class body}// initComponent replaces the constructor:Ext.Foo = Ext.extend(Ext.Bar, { initComponent : function(){ // call superclass initComponent Ext.Container.superclass.initComponent.call(this); this.addEvents({ // add events }); }}</code></pre> */ initComponent : Ext.emptyFn, /** * <p>Render this Component into the passed HTML element.</p> * <p><b>If you are using a {@link Ext.Container Container} object to house this Component, then * do not use the render method.</b></p> * <p>A Container's child Components are rendered by that Container's * {@link Ext.Container#layout layout} manager when the Container is first rendered.</p> * <p>Certain layout managers allow dynamic addition of child components. Those that do * include {@link Ext.layout.CardLayout}, {@link Ext.layout.AnchorLayout}, * {@link Ext.layout.FormLayout}, {@link Ext.layout.TableLayout}.</p> * <p>If the Container is already rendered when a new child Component is added, you may need to call * the Container's {@link Ext.Container#doLayout doLayout} to refresh the view which causes any * unrendered child Components to be rendered. This is required so that you can add multiple * child components if needed while only refreshing the layout once.</p> * <p>When creating complex UIs, it is important to remember that sizing and positioning * of child items is the responsibility of the Container's {@link Ext.Container#layout layout} manager. * If you expect child items to be sized in response to user interactions, you must * configure the Container with a layout manager which creates and manages the type of layout you * have in mind.</p> * <p><b>Omitting the Container's {@link Ext.Container#layout layout} config means that a basic * layout manager is used which does nothing but render child components sequentially into the * Container. No sizing or positioning will be performed in this situation.</b></p> * @param {Element/HTMLElement/String} container (optional) The element this Component should be * rendered into. If it is being created from existing markup, this should be omitted. * @param {String/Number} position (optional) The element ID or DOM node index within the container <b>before</b> * which this component will be inserted (defaults to appending to the end of the container) */ render : function(container, position){ if(!this.rendered && this.fireEvent("beforerender", this) !== false){ if(!container && this.el){ this.el = Ext.get(this.el); container = this.el.dom.parentNode; this.allowDomMove = false; } this.container = Ext.get(container); if(this.ctCls){ this.container.addClass(this.ctCls); } this.rendered = true; if(position !== undefined){ if(typeof position == 'number'){ position = this.container.dom.childNodes[position]; }else{ position = Ext.getDom(position); } } this.onRender(this.container, position || null); if(this.autoShow){ this.el.removeClass(['x-hidden','x-hide-' + this.hideMode]); } if(this.cls){ this.el.addClass(this.cls); delete this.cls; } if(this.style){ this.el.applyStyles(this.style); delete this.style; } if(this.overCls){ this.el.addClassOnOver(this.overCls); } this.fireEvent("render", this); this.afterRender(this.container); if(this.hidden){ this.hide(); } if(this.disabled){ this.disable(); } if(this.stateful !== false){ this.initStateEvents(); } } return this; }, // private initState : function(config){ if(Ext.state.Manager){ var id = this.getStateId(); if(id){ var state = Ext.state.Manager.get(id); if(state){ if(this.fireEvent('beforestaterestore', this, state) !== false){ this.applyState(state); this.fireEvent('staterestore', this, state); } } } } }, // private getStateId : function(){ return this.stateId || ((this.id.indexOf('ext-comp-') == 0 || this.id.indexOf('ext-gen') == 0) ? null : this.id); }, // private initStateEvents : function(){ if(this.stateEvents){ for(var i = 0, e; e = this.stateEvents[i]; i++){ this.on(e, this.saveState, this, {delay:100}); } } }, // private applyState : function(state, config){ if(state){ Ext.apply(this, state); } }, // private getState : function(){ return null; }, // private saveState : function(){ if(Ext.state.Manager && this.stateful !== false){ var id = this.getStateId(); if(id){ var state = this.getState(); if(this.fireEvent('beforestatesave', this, state) !== false){ Ext.state.Manager.set(id, state); this.fireEvent('statesave', this, state); } } } }, /** * Apply this component to existing markup that is valid. With this function, no call to render() is required. * @param {String/HTMLElement} el */ applyToMarkup : function(el){ this.allowDomMove = false; this.el = Ext.get(el); this.render(this.el.dom.parentNode); }, /** * Adds a CSS class to the component's underlying element. * @param {string} cls The CSS class name to add */ addClass : function(cls){ if(this.el){ this.el.addClass(cls); }else{ this.cls = this.cls ? this.cls + ' ' + cls : cls; } }, /** * Removes a CSS class from the component's underlying element. * @param {string} cls The CSS class name to remove */ removeClass : function(cls){ if(this.el){ this.el.removeClass(cls);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -