2012-04-27 143 views
3
var tabPanel = Ext.getCmp('tabPanel'); 
for(var i=1; i<tabPanel.items.length; i++) 
{ 
    tabPanel.items.removeAt(i); 
    i--; 
} 
tabPanel.doLayout(); 

我試圖從tabPanel刪除所有選項卡(第一個除外)。 這段代碼是這樣做的。我用螢火蟲檢查過它。
但仍然沒有反映在UI中。 是不是doLayout()夠了?從tabPanel刪除選項卡

回答

4

與其說

tabPanel.items.removeAt(i); 

呼叫

tabPanel.remove(tabPanel.items.getAt(i)); 

然後你告訴容器,而不是混合收集去除標籤

另一種方式來做到這一點的是

tabPanel.removeChildEls(function(tab){ 
    return tab != tabPanel.items.first(); 
}); 
+0

它的工作...非常感謝...但你能告訴我爲什麼上面的代碼不工作? – Shashwat 2012-04-27 06:37:10

+0

我在答案中的評論解釋了它。 'tabPanel.items.removeAt(i)'將它從項目'MixedCollection'中移除,但不通知'tabPanel'標籤被移除。項目集合應該以只讀方式訪問。使用'TabPanel'(繼承自'Container')方法來添加/刪除子組件(選項卡) – 2012-04-29 04:55:13

+0

我明白了。但是,當添加和刪除正常Panel中的項目時,它可以工作。自動刪除功能通知面板並進行佈局。那麼爲什麼不在標籤面板? – Shashwat 2012-06-19 09:06:41

0

這通過單擊鼠標的中間按鈕來關閉選項卡。

var middleClick = $(document).mousedown(function(e) { 
    if(e.which == 2){ 
       var tabPanel = <%= tabPanel.ClientID %>;  
       var activeTab = tabPanel.getActiveTab(); 
       if (e.target.textContent == activeTab.title) { 
        var activeTabIndex = tabPanel.items.findIndex('id', activeTab.id); 
        tabPanel.remove(activeTabIndex); 
       } 
      } 
      return true; 
    }); 

希望它有幫助! =)