📄 component.js
字号:
* @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 node, a DOM node 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
* The id of the node, a DOM node or an existing Element that will be the container to render this component into.
* Using this config, a call to render() is not required.
*/
/**
* @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){
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);
}else if(this.cls){
this.cls = this.cls.split(' ').remove(cls).join(' ');
}
},
// private
// default function is not really useful
onRender : function(ct, position){
if(this.autoEl){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -