2012-12-18 2 views
1

지금까지 모든 질문 중 하나만 이미 질문을 받고 답을 얻었습니다. :) 그러나 모든 것이 언젠가 끝나기 때문에 여기에 내 첫 번째 질문이 있습니다.ExtJS : 컴포넌트가 Ext.TabPanel의 직계 하위 클래스인지 확인합니다.

오류 처리 목적으로 모든 흥미로운 구성 요소가 추가 될 때 일반 리스너를 첨부하려고합니다. 이것은 Ext.ComponentMgr.all.on('add', function (cnt, cmp) {})으로 할 수 있습니다. 그런 다음 모든 유형의 구성 요소를 봅니다. 예를 들어 모든 버튼에 클릭 리스너를 추가하는 경우입니다.

지금해야 할 일은 tabpanel에 추가 된 모든 패널에 활성 수신기를 추가하는 것입니다. 내 문제는 : 구성 요소가 tabpanel의 직접적인 자손인지 확인하는 방법과 올바른 방법을 결정하는 방법에 대한 단서가 없습니다.

는 이미이 시도 :

나쁜 일이
Ext.ComponentMgr.all.on('add', function (cnt, cmp) { 
    if (cmp.ownerCt != undefined && cmp.ownerCt.getXType() == 'tabpanel') { 
     console.log (cmp.getXType() + ' in tabpanel with id "' + cmp.getId()); 
    } 
}); 

, 일부 내선의 문서는 "ownerCt에 의존하지 마십시오"읽고 그것은 바로 내 구성 요소의 다른 모든이 ownerCt을 가지고 있지만 패널이 추가되지 때 늦은 시간에 탭 패널.

Ext.Panel.findParentByType()이 있지만 위의 모든 수준에서 컨테이너를 찾고 올바른 방법이라고 생각하지 않습니다 (-> 성능).

미리 답변 해 주셔서 감사합니다.

답변

0

당신이 말했듯이, ownerCt는 당신이 그것을하는 순서에 따라 공사 도중 언제든지 들어올 수 있습니다. 자동으로 처리하는 탭 패널 하위 클래스를 만들면 어떨까요?

0

더 많은 시행 착오를 거치고 나 자신을위한 해결책을 찾았습니다. 나는 당신과 그것을 공유해야한다고 생각합니다. 어쩌면 다른 누군가가 그것을 사용할 수 있습니다.

Ext.ComponentMgr.all.on('add', function (cnt, cmp) {})가 발생하면 구성 요소가 생성되었지만 다른 구성 요소에만 추가 될 필요가 없기 때문에 ownerCt는 물론 비어 있습니다. 추가

  • , 있는지 확인

    구성 요소가 구성 요소 관리자 (new Ext.Panel())에 추가됩니다
    Ext.ComponentMgr.all.on('add', function (cnt, cmp) { 
        cmp.addListener ('added', function (cmp) { 
        var parent = cmp.findParentByType ('tabpanel'); 
        if (parent != undefined) { 
         if (parent.items.contains (cmp)) { 
         cmp.addListener ('activate', function (cmp) { 
          doThings(); 
         }); 
         } 
        } 
        }); 
    } 
    
    • 이 구성 요소에 added에 대한 리스너를 만듭니다

      그래서 나는 다음과 같은 짓을했는지 어떤 부모가 tabpanel입니까

    • 그렇다면 구성 요소가 tabpanel의 직계 하위 항목인지 확인하십시오 (= 항목에 포함되어 있음)
    • ???
    • 이익!
  • +0

    구성 요소를 만들 때마다 이러한 체조를해야한다는 의미이므로 매우 좋은 해결책은 아닙니다. 탭 패널 하위 클래스를 만들어 직접 처리하는 것이 훨씬 간단하고 명확합니다. –

    관련 문제