2011-05-11 4 views
1

ExtJS 프레임 워크를 사용하여 웹 앱을 구축했습니다.tabPanels - ExtJs에 콘텐츠 추가 및 제거 중 오류가 발생했습니다.

나는 내 서쪽 패널에 나무가 있고 중앙 패널에는 TabPanel이 있습니다.

var center = Ext.getCmp("center-panel"); 

var existingpanel = center.get(panelId); 
if (existingpanel) { 
    center.setActiveTab(existingpanel); 
} else { 

    var activeTab = center.getActiveTab(); 

    if (!openNew && activeTab) { 
     var removed = center.remove(activeTab, true); 
    } 

     center.add(c); 
     center.setActiveTab(panelId); 
     center.doLayout(); 

} 

이 현재 구성 요소를 검색 한 다음에 검사 : 나는 그것을 중심 탭 패널에게 양식을 추가하려고 시도 서쪽 패널의 트리 노드 하나를 클릭하면 다음 코드가 호출됩니다 로드하려고하고있는 탭이 존재할지 어떨지를 확인해주세요. 존재하고있는 경우는 그 탭을 기동합니다. 그렇지 않은 경우는, 새로운 탭을 추가하려고합니다. OpenNew는 새 탭에서 열어야하는지 여부를 나타 내기 위해 전달되는 플래그입니다 (예 : 사용자가 Ctrl 키를 누른 상태에서 트리의 노드를 클릭하는 경우).

OpenNew 기능을 사용하지 않고 (예 : 하나의 탭만 사용) 양식이 올바르게 작동하고 탭이 제거/다시 추가 된 노드 사이를 탐색 할 수 있습니다.

그러나 두 번째 탭을 열려면 노드를 Ctrl + 클릭하고 탭이 열리므로 두 개의 탭이 있지만 다른 노드를 선택하면 (이렇게하면 최근 추가 된 두 번째 탭이 제거됩니다. 새 노드의 새 탭으로 바꿉니다) 두 번째 탭을 닫지 만 새 탭을 추가하지 못합니다.

단 하나의 탭이있는 경우 탭을 추가/제거하는 이유가 없습니다. -------- :

파이어 버그에 오류가 있습니다,하지만 많은 도움 제공하지 않습니다

uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOM3Node.compareDocumentPosition]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: /ext/ext-3.1.1/adapter/ext/ext-base-debug.js?d=1066331810 :: <TOP_LEVEL> :: line 1900" data: no] 

----------- UPDATE를 ------

doLayout() 호출과 관련이있는 것처럼 보입니다. remove() 호출 바로 뒤에 doLayout() 호출을 추가하면 add() 호출만큼 뚱뚱해집니다. .add() 호출 다음에 넣으면 새 탭을 절반로드하지만 완료하기 전에 중지합니다.

두 경우 모두 doLayout() 호출 한 다음 조금 더 작동합니다 및 두 개의 작동 탭을 가질 수 있지만 세 번째 탭을 추가 할 때 위와 같은 동작을 표시하고 닫습니다 세 번째 탭을 클릭하고 새 패널을 다시 열지 마십시오.

+0

지금은 아무 것도 생각할 수 없습니다. 여러 탭을 열려면 Ctrl 키를 누른 채 반복해서 클릭하면 어떻게됩니까? 어떤 버전의 ext를 사용하고 있으며 jsfiddle 예제를 게시하면 도움이 될 것입니다. 코드가 center.add (c) 비트에 도착했는지 확인 했습니까? – Jad

+0

ctrl + 클릭을 계속하면 더 많은 탭이 추가됩니다. 여러 탭이 열린 상태에서 remove() 함수를 호출하면 오류가 발생하기 시작합니다. 여러 탭을 연 다음 탭 머리글의 닫기 버튼을 사용하여 닫으면 비슷한 문제가 발생합니다. – rhinds

+1

ID 충돌을 확인 했습니까? (같은 id 속성을 선언하는 여러 Ext 구성 요소) – Jad

답변

1

이제는이 문제를 해결했습니다. 문제는 실제로 추가 한 formPanels와 관련이있는 반면 모든 패널 자체에는 고유 한 ID가 있으므로 확인하지 않을 것입니다. 양식 내의 다른 구성 요소의 ID (Jad가 그의 의견에서 제안한대로) 양식에 정적 ID로 정의 된 "FieldSets"이 있으며 문제를 해결 한 양식이 제거되었습니다.

개발자 도구를 사용하여 Chrome의 문제를 테스트했으며 FireBug에서 제공하는 오류보다 훨씬 더 유용한 스택 추적을 발견 했으므로 지금부터 두 가지를 모두 사용할 예정입니다.

관련 문제