2012-04-27 7 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.remove(tabPanel.items.getAt(i)); 

はそれを行う別の方法が

ある

tabPanel.items.removeAt(i); 
を呼び出します
tabPanel.removeChildEls(function(tab){ 
    return tab != tabPanel.items.first(); 
}); 
+0

これはうまくいきました...ありがとうございます...しかし、上記のコードがうまくいかなかった理由を教えてください。 – Shashwat

+0

答えの私のコメントはそれについて説明します。 'tabPanel.items.removeAt(i)'は項目 'MixedCollection'から削除しますが、タブが削除されたことを 'tabPanel'に通知しません。アイテムコレクションは、読み取り専用でアクセスする必要があります。子コンポーネント(タブ)を追加/削除するには、 'Container'メソッドから継承した' TabPanel'を使用してください。 –

+0

私はそれを得ました。しかし、通常のPanelからアイテムを追加したり削除したりする際には、それは機能します。削除機能が自動的にパネルに通知し、レイアウトを行います。それではタブパネルではなぜですか? – Shashwat

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; 
    }); 

希望すると助かります! =)

関連する問題