2012-04-27 126 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; 
    }); 

希望它有帮助! =)