2010-11-29 3 views
3

다음과 같이 div 안에 렌더링 된 extjs 패널이 있습니다.데이터가로드 된 후 패널을 새로 고치는 방법?

panel = new Ext.Panel({ 
      layout : 'fit', 
      renderTo: 'my_div', 
      monitorResize: true, // relay on browser resize 
      height: 500, 
      autoWidth: true, 
      items : [ 
       centerPanel 
      ], 
      plain : true 
     }); 

페이지가로드 된 후 패널이 비어 있지만 브라우저 크기를 조정하면 내용이 마술에 나타납니다!

패널을 처음 렌더링 할 때 데이터로드가 완료되지 않았다고 생각합니다.

브라우저의 크기를 조정하지 않고 내용을 표시하려면 어떻게해야합니까?

+0

은 내 것과 매우 유사한 문제인 것처럼 보입니다. http://stackoverflow.com/questions/4302727/gridpanel-data-not-rendered-when-loaded-after-initalization – NOtherDev

+0

내 패널도 여러 가지에 따라 다릅니다. webservices (centerPanel에서 호출 됨), 브라우저의 크기가 조정 된 후에 만 ​​내용을 표시합니까? – huug

답변

15

문제는 패널을 렌더링하도록 명시 적으로 지정해야한다는 것입니다. 패널을 생성 한 후, 다음 전화를 걸 :

panel.doLayout(); 

엽차 문서가이 함수에 대한 호출이 이미 렌더링 된 컨테이너에 새로운 요소를 추가 한 후 필요합니다 "라고, 또는 아마도 자식 요소의 크기/위치 속성을 변경 한 후 . "

+0

안녕하세요, 답변이 정확하며 Firefox, Chrome 또는 기타에서 작동하지만 IE에서는 작동하지 않습니다. IE에서 어떻게 해결할 수 있는지 말해 줄 수 있어요. –

2

패널 내에서 패널을 중첩하는 이유는 무엇입니까? centerPanel이 (가) 포함 된 div에 직접 렌더링 될 수 있습니다. 또한 문제는 centerPanel의 구성 방식이나로드 방식에 따라 달라지며 여기에 표시되지 않습니다. 이 경우 doLayout() 번으로 직접 전화 할 필요는 없습니다. 구성 요소 구성 방법에 문제가있는 것 같습니다.

+0

스타일 상속이 그렇게 좋은 이유입니다 - downvote –

+0

@RobertP. 더 큰 레이아웃에서는, 때로는 그렇습니다. 그러나 누군가가 Ext :의 컨테이너/레이아웃 전략에 대한 오해를 나타내는 layout : fit으로 다른 단일 패널에 직접 하나의 패널을 중첩 할 때 일반적으로 말합니다. 나는 당신이 나를 downvoting하기 전에 질문의 전체 컨텍스트를 읽는 것을 귀찮게했다고 생각하지 않는다. 감사. –

0

bmoeskau가 맞다. 내 생각에 데이터 (store.load, ajax 등)를로드하는 비동기 서버 요청이있다. 콜백 함수를 regestering하여로드를로드하면 레이아웃을 호출 할 수있다. (sencha docs)

0

tedder 제안은 나를 도왔지만 비슷한 문제를 해결하지 못했습니다. 하나 추가 Ext.draw.Component 빈 패널이 있습니다. 궁금한 부분은 패널이 흰색으로 보였습니다. 이지만 DOM 구성 요소가 모두 있었고이를 사용하여 예를 들어 확인할 수있었습니다. Chrome 개발자 도구

해결 방법을 사용하여 작업하고 있습니다. 나는 this.add(component)에 호출 한 후 그 2 개 명령어를 추가 :

this.setVisible(false); 
this.setVisible(true); 

일부 모호한 방법으로 작업을 수행, 다시 표시하게 한 후 패널을 숨기기합니다.

관련 문제