2013-07-20 1 views
1

탭을 추가/제거하고 싶습니다.extjs에서 제거 된 탭을 다시 추가하는 방법

추가/제거 방법에 대해 알고 있습니다. 하지만 내 문제는 다시 같은 탭을 다시 추가하고 싶다는 것입니다. 다시 추가 된 탭은 메모리에 저장됩니다.

Uncaught TypeError: Cannot read property 'addCls' of null

Extjs forum thread이 때문에 이미 파괴 요소를 추가하려고하는 것입니다 제안 :

function addMyTab(tab) { 
    var me = this; 
    if (!tab) { // use most recently added tab 
     tab = me.tab; 
    } else { // update most recently added tab 
     me.tab = tab; 
    } 

    var tabPanel = Ext.ComponentQuery.query(..); 
    tabPanel.removeAll(); 
    tabPanel.add(me.tab); 
} 

이 그러나 doesnot 작업, 그것은이 오류가 발생합니다 : 나는 같은 것을 할 수 있도록하려면 .

탭을 어떻게 다시 사용할 수 있습니까? 이 같은

+0

여기서'tab'은 무엇입니까?'tabPanel.add'를 호출 할 때의 생각은 틀림 없습니까? –

+0

@ChrisFarmer 탭은 Ext.panel.Panel입니다. 최소한 내 코드에서는 변경해야 할 이유가 없습니다. – Isaac

+0

'autoDestroy' 매개 변수를 false로 설정하여'remove'를 시도한 적이 있습니까? 확실히 실제 패널을 다시 추가하려고하지는 않습니다. 사실이라면 그 오류가 발생하지 않을 것입니다. 맞습니까? –

답변

3

제거중인 동일한 패널을 다시 추가한다고 말하는 것 같기 때문에 제거 단계 후에 패널이 파괴되고있는 것 같습니다. 이게 뭔가 일을해야한다고 생각합니다 :

// initially add the panel 
tabPanel.add(myPanel); 

// remove it with autoDestroy set to false so Ext doesn't kill your panel 
tabPanel.removeAll(false); 

// re-add the panel 
tabPanel.add(myPanel); 
+0

@ Is7aq 재사용하지 않을 탭에서 Ext.destroy()를 호출했는지 확인하십시오 –

0

시도 뭔가 :

var currentTab = null; 
function addMyTab(tab) { 
    var me = this; 
    if (tab) { // use most recently added tab 
     currentTab = tab; 
    } 
    var tabPanel = Ext.ComponentQuery.query(..); 
    tabPanel.removeAll(); 
    tabPanel.add(currentTab); 
} 

currentTab는 글로벌 변수입니다. 새 탭을 전달하여 현재 탭을 업데이트하는 경우 현재 탭을 새 탭으로 바꾸십시오. 그렇지 않으면 현재 탭을 그대로 사용하십시오. currentTab을 처음 사용하기 전에 일부 탭으로 초기화해야합니다.

관련 문제