2012-02-13 2 views
1

이것은 주말 동안 나를 미치게 만들었고 실행 가능한 솔루션 인 것으로 나타 났지만 내 질문은 Dojo/Dijit 사용에 대한 근본적인 것이 있는지 여부입니다. 있어야 할 곳에 없는.dojo, dgrid, TabContainer 및 JsonRest를 사용하는 DOMException

여기에 문제가 있습니다 : dgrid이 JsonRest 저장소를 사용하고 TabContainer의 숨겨진 탭 (초기에 선택되지 않은 탭)에있는 페이지를 만들 때마다 DOMExceptions와 약간의 망가진 dgrid가 나타납니다. 특히, dgrid는 마지막 데이터 행 아래에 큰 빈 공간을 가지고 있으며 dgrid 데이터의 맨 아래 또는 맨 위로 스크롤하면 추가 DOMExceptions가 발생합니다.

열 머리글 중 하나를 클릭하여 dgrid를 정렬하면 레이아웃이 재설정되고 올바르게 작동합니다. dgrid가 선택되지 않은 탭 대신 페이지의 보이는 부분에서 초기화되면 괜찮습니다. JsonRest 대신 메모리 저장소를 사용하면 모든 것이 잘됩니다 (dgrid가 숨겨진 탭에서 초기화 된 경우에도 마찬가지입니다). dgrid가 숨겨진 탭에서 초기화되었지만 저장소가 없으면 괜찮습니다 (그러나 비어 있음).

증거에 따르면, 문제는 JsonRest 쿼리에 시간이 걸리므로, 초기화 할 때 dgrid가 깨지는 이유와 관련이 있다고 생각했습니다. 내 솔루션은 저장소없이 dgrid를 만든 다음 dgrid가 포함 된 탭이 표시 될 때 저장소를 설정하는 것이 었습니다. 그래도이게 멍청 해 보인다. 나는 저장소로 dgrid를 만들 수 있어야하고 외부에서 그것을 피들 할 필요가 없습니다.

그래서, 서버 제공 데이터로 숨겨진 dgrid를 초기화하는 적절한 방법 (또는 최소한 합리적인 방법)이 있거나 TabContainer + dgrid + JsonRest의 설정에 대한 정보가 있습니다. 실종 됐어?

답변

1

질문에 대한 답변이 없지만 Dijit 위젯과 컨테이너 사이에 위젯의 수명주기 및 시작과 관련된 계약이 있습니다 ... 특히 DOM에 요소가 추가되고 마지막으로 요소를 레이아웃하고 크기를 조정하기 위해 startup() 메서드가 호출 될 때. dgrid는 아마도 참여하지 않습니다. 아마도 당신은 dgrid 구성 요소의 레이아웃을 트리거 할 TabContainer의 시작 메소드에 무언가를 연결할 수 있습니까?

+0

어딘가에서 계약을 파기하면 놀라지 않을 것입니다. Dijit 라이프 사이클의 세부 사항은 나에게 다소 모호합니다 .Dgrid는 실제로 ContentPane 내에 포함되어 있습니다. 더 정확한 것은 ContentPane의 domNode입니다 (CP의 postCreate에서'var grid = declare ([Grid, DijitRegistry], {...}) 에서처럼 domNode를 그리드의 부착 점으로 사용합니다. .domNode)'). 이는 포함 된 탭이 선택되면 그리드가 ContentPane으로 자체 크기가 조정되는 한 작동하는 것으로 보입니다. – jason0x43

관련 문제