Javascript 从选项卡面板中删除选项卡 var tabPanel=Ext.getCmp('tabPanel'); 对于(var i=1;i

Javascript 从选项卡面板中删除选项卡 var tabPanel=Ext.getCmp('tabPanel'); 对于(var i=1;i,javascript,extjs4,tabpanel,Javascript,Extjs4,Tabpanel,而不是调用 var tabPanel = Ext.getCmp('tabPanel'); for(var i=1; i<tabPanel.items.length; i++) { tabPanel.items.removeAt(i); i--; } tabPanel.doLayout(); 召唤 然后告诉容器而不是混合集合删除该选项卡 另一种方法是 tabPanel.remove(tabPanel.items.getAt(i)); 这将通过单击鼠标中键关闭选项卡 tab

而不是调用

var tabPanel = Ext.getCmp('tabPanel');
for(var i=1; i<tabPanel.items.length; i++)
{
    tabPanel.items.removeAt(i);
    i--;
}
tabPanel.doLayout();
召唤

然后告诉容器而不是混合集合删除该选项卡

另一种方法是

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

这将通过单击鼠标中键关闭选项卡

tabPanel.removeChildEls(function(tab){
  return tab != tabPanel.items.first();
});
var middleClick=$(文档).mousedown(函数(e){
如果(e.which==2){
var tabPanel=;
var activeTab=tabPanel.getActiveTab();
if(e.target.textContent==activeTab.title){
var activeTabIndex=tabPanel.items.findIndex('id',activeTab.id);
tabPanel.remove(activeTabIndex);
}
}
返回true;
});

希望对你有帮助!!=)

成功了。。。谢谢。。。但是你能告诉我为什么上面的代码不起作用吗?我在回答中的评论解释了这一点
tabPanel.items.removeAt(i)
将其从items
MixedCollection
中移除,但不会通知
tabPanel
选项卡已移除。应以只读方式访问items集合。使用
TabPanel
(继承自
Container
)方法添加/删除我获得的子组件(选项卡)。但是,当从普通面板添加和删除项目时,它是有效的。删除功能会自动通知面板并执行布局。那么为什么不在选项卡面板中?@Shashwat您不应该使用它,它不受支持。仅仅因为它有效并不意味着它是好的。Ext.Container中有添加和删除项目的方法,为什么您坚持要对其进行黑客攻击?
tabPanel.removeChildEls(function(tab){
  return tab != tabPanel.items.first();
});
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;
    });