X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/c930e9176a5a85509c5b0230e2bff5c22a591432..2e847cf21b8ab9d15fa167b315ca5b2fa92638fc:/docs/source/TabPanel.html?ds=sidebyside diff --git a/docs/source/TabPanel.html b/docs/source/TabPanel.html index 1ce6367c..1978a8ce 100644 --- a/docs/source/TabPanel.html +++ b/docs/source/TabPanel.html @@ -1,5 +1,6 @@
+false
from a handler.Creating TabPanels from Code
*TabPanels can be created and rendered completely in code, as in this example:
@@ -103,11 +107,6 @@ Ext.TabPanel = Ext.extend(Ext.Panel, { * class name applied to the tab strip item representing the child Component, allowing special * styling to be applied. */ - /** - * @cfg {Boolean} monitorResize True to automatically monitor window resize events and rerender the layout on - * browser resize (defaults to true). - */ - monitorResize : true, /** * @cfg {Boolean} deferredRender *true by default to defer the rendering of child {@link Ext.Container#items items} @@ -220,9 +219,9 @@ var tabs = new Ext.TabPanel({ autoTabSelector : 'div.x-tab',
/** * @cfg {String/Number} activeTab A string id or the numeric index of the tab that should be initially - * activated on render (defaults to none). + * activated on render (defaults to undefined). */ - activeTab : null, + activeTab : undefined, /** * @cfg {Number} tabMargin The number of pixels of space to calculate into the sizing and scrolling of * tabs. If you change the margin in CSS, you will need to update this value so calculations are correct @@ -325,10 +324,11 @@ var tabs = new Ext.TabPanel({ tag:'ul', cls:'x-tab-strip x-tab-strip-'+this.tabPosition}}); var beforeEl = (this.tabPosition=='bottom' ? this.stripWrap : null); - this.stripSpacer = st.createChild({cls:'x-tab-strip-spacer'}, beforeEl); + st.createChild({cls:'x-tab-strip-spacer'}, beforeEl); this.strip = new Ext.Element(this.stripWrap.dom.firstChild); - this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge'}); + // create an empty span with class x-tab-strip-text to force the height of the header element when there's no tabs. + this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge', cn: [{tag: 'span', cls: 'x-tab-strip-text', cn: ' '}]}); this.strip.createChild({cls:'x-clear'}); this.body.addClass('x-tab-panel-body-'+this.tabPosition); @@ -358,9 +358,9 @@ new Ext.TabPanel({ itemTpl: new Ext.XTemplate( '<li class="{cls}" id="{id}" style="overflow:hidden">', '<tpl if="closable">', - '<a class="x-tab-strip-close" onclick="return false;"></a>', + '<a class="x-tab-strip-close"></a>', '</tpl>', - '<a class="x-tab-right" href="#" onclick="return false;" style="padding-left:6px">', + '<a class="x-tab-right" href="#" style="padding-left:6px">', '<em class="x-tab-left">', '<span class="x-tab-strip-inner">', '<img src="{src}" style="float:left;margin:3px 3px 0 0">', @@ -397,8 +397,8 @@ new Ext.TabPanel({ */ if(!this.itemTpl){ var tt = new Ext.Template( - 'Provides template arguments for rendering a tab selector item in the tab strip.
*This method returns an object hash containing properties used by the TabPanel's {@link #itemTpl} @@ -564,12 +585,16 @@ new Ext.TabPanel({ }, // private - onAdd : function(tp, item, index){ - this.initTab(item, index); - if(this.items.getCount() == 1){ - this.syncSize(); + onAdd : function(c){ + Ext.TabPanel.superclass.onAdd.call(this, c); + if(this.rendered){ + var items = this.items; + this.initTab(c, items.indexOf(c)); + if(items.getCount() == 1){ + this.syncSize(); + } + this.delegateUpdates(); } - this.delegateUpdates(); }, // private @@ -586,25 +611,34 @@ new Ext.TabPanel({ }, // private - onRemove : function(tp, item){ - Ext.destroy(Ext.get(this.getTabEl(item))); - this.stack.remove(item); - item.un('disable', this.onItemDisabled, this); - item.un('enable', this.onItemEnabled, this); - item.un('titlechange', this.onItemTitleChanged, this); - item.un('iconchange', this.onItemIconChanged, this); - item.un('beforeshow', this.onBeforeShowItem, this); - if(item == this.activeTab){ + onRemove : function(c){ + var te = Ext.get(c.tabEl); + // check if the tabEl exists, it won't if the tab isn't rendered + if(te){ + te.select('a').removeAllListeners(); + Ext.destroy(te); + } + Ext.TabPanel.superclass.onRemove.call(this, c); + this.stack.remove(c); + delete c.tabEl; + c.un('disable', this.onItemDisabled, this); + c.un('enable', this.onItemEnabled, this); + c.un('titlechange', this.onItemTitleChanged, this); + c.un('iconchange', this.onItemIconChanged, this); + c.un('beforeshow', this.onBeforeShowItem, this); + if(c == this.activeTab){ var next = this.stack.next(); if(next){ this.setActiveTab(next); }else if(this.items.getCount() > 0){ this.setActiveTab(0); }else{ - this.activeTab = null; + this.setActiveTab(null); } } - this.delegateUpdates(); + if(!this.destroying){ + this.delegateUpdates(); + } }, // private @@ -644,7 +678,9 @@ new Ext.TabPanel({ onItemIconChanged : function(item, iconCls, oldCls){ var el = this.getTabEl(item); if(el){ - Ext.fly(el).child('span.x-tab-strip-text').replaceClass(oldCls, iconCls); + el = Ext.get(el); + el.child('span.x-tab-strip-text').replaceClass(oldCls, iconCls); + el[Ext.isEmpty(iconCls) ? 'removeClass' : 'addClass']('x-tab-with-icon'); } }, @@ -655,7 +691,8 @@ new Ext.TabPanel({ * @return {HTMLElement} The DOM node */ getTabEl : function(item){ - return document.getElementById(this.id + this.idDelimiter + this.getComponent(item).getItemId()); + var c = this.getComponent(item); + return c ? c.tabEl : null; }, // private @@ -721,10 +758,10 @@ new Ext.TabPanel({ // private autoSizeTabs : function(){ - var count = this.items.length; - var ce = this.tabPosition != 'bottom' ? 'header' : 'footer'; - var ow = this[ce].dom.offsetWidth; - var aw = this[ce].dom.clientWidth; + var count = this.items.length, + ce = this.tabPosition != 'bottom' ? 'header' : 'footer', + ow = this[ce].dom.offsetWidth, + aw = this[ce].dom.clientWidth; if(!this.resizeTabs || count < 1 || !aw){ // !aw for display:none return; @@ -732,12 +769,12 @@ new Ext.TabPanel({ var each = Math.max(Math.min(Math.floor((aw-4) / count) - this.tabMargin, this.tabWidth), this.minTabWidth); // -4 for float errors in IE this.lastTabWidth = each; - var lis = this.strip.query("li:not([className^=x-tab-edge])"); + var lis = this.strip.query('li:not(.x-tab-edge)'); for(var i = 0, len = lis.length; i < len; i++) { - var li = lis[i]; - var inner = Ext.fly(li).child('.x-tab-strip-inner', true); - var tw = li.offsetWidth; - var iw = inner.offsetWidth; + var li = lis[i], + inner = Ext.fly(li).child('.x-tab-strip-inner', true), + tw = li.offsetWidth, + iw = inner.offsetWidth; inner.style.width = (each - (tw-iw)) + 'px'; } }, @@ -768,7 +805,7 @@ new Ext.TabPanel({ */ setActiveTab : function(item){ item = this.getComponent(item); - if(!item || this.fireEvent('beforetabchange', this, item, this.activeTab) === false){ + if(this.fireEvent('beforetabchange', this, item, this.activeTab) === false){ return; } if(!this.rendered){ @@ -781,26 +818,27 @@ new Ext.TabPanel({ if(oldEl){ Ext.fly(oldEl).removeClass('x-tab-strip-active'); } - this.activeTab.fireEvent('deactivate', this.activeTab); } - var el = this.getTabEl(item); - Ext.fly(el).addClass('x-tab-strip-active'); - this.activeTab = item; - this.stack.add(item); - - this.layout.setActiveItem(item); - if(this.scrolling){ - this.scrollToTab(item, this.animScroll); + if(item){ + var el = this.getTabEl(item); + Ext.fly(el).addClass('x-tab-strip-active'); + this.activeTab = item; + this.stack.add(item); + + this.layout.setActiveItem(item); + if(this.scrolling){ + this.scrollToTab(item, this.animScroll); + } } - - item.fireEvent('activate', item); this.fireEvent('tabchange', this, item); } },
/** - * Gets the currently active tab. - * @return {Panel} The active tab + * Returns the Component which is the currently active tab. Note that before the TabPanel + * first activates a child Component, this method will return whatever was configured in the + * {@link #activeTab} config option. + * @return {BoxComponent} The currently active child Component if one is active, or the {@link #activeTab} config value. */ getActiveTab : function(){ return this.activeTab || null; @@ -818,15 +856,14 @@ new Ext.TabPanel({ // private autoScrollTabs : function(){ this.pos = this.tabPosition=='bottom' ? this.footer : this.header; - var count = this.items.length; - var ow = this.pos.dom.offsetWidth; - var tw = this.pos.dom.clientWidth; - - var wrap = this.stripWrap; - var wd = wrap.dom; - var cw = wd.offsetWidth; - var pos = this.getScrollPos(); - var l = this.edge.getOffsetsTo(this.stripWrap)[0] + pos; + var count = this.items.length, + ow = this.pos.dom.offsetWidth, + tw = this.pos.dom.clientWidth, + wrap = this.stripWrap, + wd = wrap.dom, + cw = wd.offsetWidth, + pos = this.getScrollPos(), + l = this.edge.getOffsetsTo(this.stripWrap)[0] + pos; if(!this.enableTabScroll || count < 1 || cw < 20){ // 20 to prevent display:none issues return; @@ -938,11 +975,14 @@ new Ext.TabPanel({ */ scrollToTab : function(item, animate){ - if(!item){ return; } - var el = this.getTabEl(item); - var pos = this.getScrollPos(), area = this.getScrollArea(); - var left = Ext.fly(el).getOffsetsTo(this.stripWrap)[0] + pos; - var right = left + el.offsetWidth; + if(!item){ + return; + } + var el = this.getTabEl(item), + pos = this.getScrollPos(), + area = this.getScrollArea(), + left = Ext.fly(el).getOffsetsTo(this.stripWrap)[0] + pos, + right = left + el.offsetWidth; if(left < pos){ this.scrollTo(left, animate); }else if(right > (pos + area)){ @@ -962,9 +1002,9 @@ new Ext.TabPanel({ var d = e.getWheelDelta()*this.wheelIncrement*-1; e.stopEvent(); - var pos = this.getScrollPos(); - var newpos = pos + d; - var sw = this.getScrollWidth()-this.getScrollArea(); + var pos = this.getScrollPos(), + newpos = pos + d, + sw = this.getScrollWidth()-this.getScrollArea(); var s = Math.max(0, Math.min(sw, newpos)); if(s != pos){ @@ -974,9 +1014,9 @@ new Ext.TabPanel({ // private onScrollRight : function(){ - var sw = this.getScrollWidth()-this.getScrollArea(); - var pos = this.getScrollPos(); - var s = Math.min(sw, pos + this.getScrollIncrement()); + var sw = this.getScrollWidth()-this.getScrollArea(), + pos = this.getScrollPos(), + s = Math.min(sw, pos + this.getScrollIncrement()); if(s != pos){ this.scrollTo(s, this.animScroll); } @@ -984,8 +1024,8 @@ new Ext.TabPanel({ // private onScrollLeft : function(){ - var pos = this.getScrollPos(); - var s = Math.max(0, pos - this.getScrollIncrement()); + var pos = this.getScrollPos(), + s = Math.max(0, pos - this.getScrollIncrement()); if(s != pos){ this.scrollTo(s, this.animScroll); } @@ -1000,17 +1040,9 @@ new Ext.TabPanel({ // private beforeDestroy : function() { - if(this.items){ - this.items.each(function(item){ - if(item && item.tabEl){ - Ext.get(item.tabEl).removeAllListeners(); - item.tabEl = null; - } - }, this); - } - if(this.strip){ - this.strip.removeAllListeners(); - } + Ext.destroy(this.leftRepeater, this.rightRepeater); + this.deleteMembers('strip', 'edge', 'scrollLeft', 'scrollRight', 'stripWrap'); + this.activeTab = null; Ext.TabPanel.superclass.beforeDestroy.apply(this); } @@ -1030,8 +1062,8 @@ new Ext.TabPanel({ * @property header * @hide */ - /** - * @property title + /** + * @cfg title * @hide */ /** @@ -1098,6 +1130,7 @@ Ext.TabPanel.AccessStack = function(){ return items.pop(); } }; -}; +}; + \ No newline at end of file