2010-12-10 7 views
2

주 TabPanel에 추가 할 Ext Js 패널이 있습니다. 추가 할 패널에는 FormPanel이 포함되어 있으며 FormPanel 안에는 Name 필드가 있습니다. 내가하고 싶은 것은 양식 필드의 이름을 기반으로 Tab의 이름을 변경하는 것입니다.컨테이너 초기화시 Ext Js FormPanel에서 getValues ​​()를 호출 할 수 없습니다. 패널

문제는 그 내가 전화하면은 FormPanel의 getForm().getValues() 패널의 initComponent 함수의 내부에, 나는 다음과 같은 자바 스크립트 오류 얻을 :

Uncaught TypeError: Cannot read property 'dom' of undefined 

내가 (버튼 누름에 예) initComponent 함수의 외부에서이를 수행하면 모든 작업을 벌금. 테스트를 한 후에는 FormPanel이 실제로 렌더링되지 않았기 때문에 dom이 존재하지 않는다고 생각합니다. getValues()이 실패합니다. 그러나로드시 패널에서 FormPanel의 값을 가져 오는 방법을 알아낼 수 없습니다.

나는 이벤트를 경청했다. 나는 시도 :

this.detailForm.on('afterrender', function() { alert('test'); }); 

하지만,이 일을 (이 화면에 보이지 않는) AfterRender 실제로 렌더링되는 형태로 이전이라는 것을 보여 주었다. 내 사용자 지정 함수 처리기로 경고를 변경하면 이전 DOM 예외가 발생합니다. afterrender 대신 activateenable 이벤트를 사용하려고 시도했지만 API에서 FormPanel이 해당 이벤트를 발생시키는 경우에도 알림 ('테스트')이 호출되지 않습니다.

내 패널을로드 할 때 내 패널의 내부 FormPanel 값을 가져올 수있는 방법을 찾지 못하는 것 같습니다. 누구든지 아이디어가 있습니까?

답변

3

getValues ​​() 대신 getFieldValues ​​()를 사용하면 DOM에서 읽는 대신 각 필드 인스턴스의 getValue() 메소드를 호출하여 값을 수집합니다. 이렇게하면 양식의 렌더링 된 상태에 관계없이 값을 가져올 수 있습니다.

+0

두 가지 모두 작동하는 것처럼 보입니다. 그러나이 결과를 'afterlayout' 이벤트에 의존하는 것보다 낫다고 생각하여 답변으로 표시하고 있습니다. – KallDrexx

1

프로젝트 중 하나에서 동일한 문제가 발생하여 afterlayout 이벤트를 사용하여 문제를 해결했습니다.

0

.deferredRender : false를 설정하면됩니다.

Ext.TabPanel.deferredRender

그럼 그냥 직선 deferredRender으로 테스트하여 afterlayout 변경 출시 할 아마 최고의 : 잘못된 설정 항목을 선택합니다.

비활성 탭이 활성화 될 때까지 렌더링되지 않기 때문에 문제가 발생한 것으로 생각됩니다. 시나리오에서는 탭이 활성화되거나 표시 될 때까지 값이 존재하지 않기 때문에 값을 가져올 수 없습니다.

설정 deferredRender : false는 모든 탭 내의 항목을 렌더링합니다. deferredRender : false를 설정하면 성능이 저하 될 수 있으므로 테스트를 수행해야합니다.

희망이 도움이됩니다.