2011-05-04 2 views
6

데이터 저장소 레코드에서 ExtJs FormPanel을 동적으로 채우려고합니다. 사용자가 GridPanel에서 행을 클릭하면 buildForm 메소드가 호출되고 클릭 된 레코드가 첫 번째 arg로 전달되어 전송됩니다.데이터 저장소 레코드에서 formpanel을 동적으로 작성하는 ExtJs

아래 코드 (디버깅 할 때)는 작동하지만, doLayout 메서드는 아무 효과가 없습니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

mymodule = Ext.extend(Ext.FormPanel, { 
    forceLayout: true, 
    initComponent: function() { 
     Ext.applyIf(this, { 
      id: Ext.id(), 
      labelWidth: 75, 
      defaultType: 'textfield', 
      items: [{ 
       layout: 'form', 
       items: [{ 
        fieldLabel: 'test', 
        xtype: 'textfield' 
       }, { 
        fieldLabel: 'test', 
        xtype: 'textfield' 
       }] 
      }] 
     }); 
     mymodule.superclass.initComponent.call(this); 
    }, 
    buildForm: function (record, c) { 
     var form = this.getForm(); 

     var formItems = new Ext.util.MixedCollection(); 

     Ext.each(record.fields.items, function (item) { 
      formItems.add(new Ext.form.TextField({ 
       labelStyle: 'width:100px', 
       fieldLabel: item.name, 
       name: item.dataIndex, 
       id: 'field-' + item.name 
      })); 
     }, this); 

     form.items = formItems; 

     this.doLayout(false, true); 

     form.loadRecord(record); 
    } 
}); 

답변

5

양식에 구성 요소를 추가하는 올바른 방법은 add() 메서드를 사용하는 것입니다. 양식이 이미 렌더링 된 경우 add() 방법을 사용하고 doLayout()으로 전화하십시오.

그래서 당신이 시도 할 수 있습니다 :

form.add(formItems); 
form.doLayout(false,true); 
form.loadRecord(record); 
+0

덕분에, 항목을 제거하는 올바른 방법이 무엇인지 그 경우에? 폼을 먼저 지우려면 – Dve

+0

을 사용하면 폼에서 컴포넌트를 제거하기 위해'remove()'또는'removeAll()'메소드를 사용할 수 있습니다 –