2009-08-27 3 views
3

기본적으로 여러 항목에서 공유되는 항목이있는 formPanel이 포함 된 창이 있습니다. formPanel의 항목이 약간 다를 수 있음을 의미합니다. (통제의 유형).ExtJS - FormPanel 항목 지우기 및 동적 새로 고침

나는 창에서 적절한 상황에 맞는 사용자 지정 단추를 동적으로 지우고 추가 할 수있었습니다.

그러나 formPanel의 항목에 약간의 문제가 있습니다.

var items = this.items; 
if(items){ 
    delete this.items; 
    if(Ext.isArray(items)){ 
     this.add.apply(this, items); 
    }else{ 
     this.add(items); 
    } 
} 

이 내가 달성하기 위해 노력하고있어 유사 할 것으로 보인다 :

는 소스에 파고, 나는 Ext.Container initComponent 함수 방법에 코드의 작은 조각이 있음을 발견했다. 다시 한번이 코드를 호출 할 것이다 formPanel.add 메서드를 호출 한 후 현재의 모든 항목을 삭제하고 :

if(!this.items){ 
    this.initItems(); 
} 

이 모든 벌금 여기에있다. 그리고 폼의 초기로드가 완벽하게 작동합니다. 창을 숨기고 다시 열면 항목의 지우기/다시로드가 내 구성 요소에서 완벽하게 작동하지만 이전 childNodes/항목은 dom.children 및 dom.innerHTML에 계속 남아 있습니다.

그래서 my formPanel에는 값이없는 두 개 이상의 컨트롤 집합이 표시되고 하단에 새로로드 된 컨트롤에는 실제 값이 표시됩니다.

항목 지우기/추가 후에 formPanel.doLayout()을 호출합니다.

formPanel에있는 모든 항목에 대해 formPanel.remove 메소드를 호출 해 보았습니다.하지만 여전히 중복 된 표시로 끝나고 레이아웃이 제대로 고정되지 않았 음을 나타냅니다. 각 항목 아래의 가로 스크롤 막대입니다.

dom.children 및 dom.innerHTML을 실제로 지우거나 다시로드하려면 어떻게해야합니까?

도움을 주시면 감사하겠습니다.

차이점이 있으면 ExtJS 2.1을 사용하고 있습니다.

답변

1

각 하위 컨테이너에 자체 업데이터가 있으면 패널 업데이터를 가져 와서 트리거하고 그 트리거를 모두 자식 updaters로 할 수 있어야합니다. 이렇게하면 구성 요소를 반복적으로 제거하거나 추가하지 않고 오히려 새로 고칩니다.

호기심에서 벗어나, 실제로 무엇을하려고합니까? FormPanel의 양식 필드에있는 데이터를 다시로드하는 중입니까?

+0

안녕하세요. 컨트롤의 새로 고침이 아닙니다.나는 그것을 닫을 때 처형되지 않는 formpanel이있는 창이 있는데, 그것은 단지 숨겨집니다. 그러나 다시 열면 formpanel의 모든 항목을 지우고 다른 컨트롤 집합을 추가하려고합니다. ReadOnly 및 편집 가능한 모드의 일종이며, 읽기 전용 및 편집 가능 모드에서 사용되는 컨트롤은 완전히 다른 유형의 컨트롤입니다. 그리고 유일한 변화는 그것에 항목이 있다면 나는 자신의 formpanels와 2 창을 선언하고 싶지 않았어. formpanel에 대한 변경 사항이 dom에 푸시되지 않아 복제됩니다. – Jabezz

+0

Jabezz, 매우 빠른 스트로크로 창을 숨기지 않고 창을 닫으려고 했습니까? 창을 닫으면 어린이와 함께 그것을 파괴합니다. 어쨌든 여기에서 소스 코드의 압축을 풀면 편리 할 것입니다. – mxgrn

0

의도적으로 formpanel을 파괴하지 않으려한다는 것을 의미합니까? 창에 서식 패널이 아닌 다른 것이 포함되어 있습니까?

창이 formpanel 만 포함하거나 formpanel을 가장 큰 부분으로 포함하는 경우 창을 닫을 때 창을 파괴하고 필요할 때마다 창을 다시 만들어 보도록하는 것이 좋습니다.

이 경우 원하는 컨트롤 유형 (준비 만/쓰기 가능)을 나타내는 창을 만드는 함수에 매개 변수를 전달할 수 있습니다.

관련 문제