2011-05-04 49 views
6

我想從數據存儲記錄動態填充一個ExtJs窗體面板。 當用戶點擊GridPanel中的一行時,將調用buildForm方法,並將點擊的記錄作爲第一個arg傳入。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 2011-05-04 10:08:18

+0

,您可以使用remove()或removeAll()方法從表單中刪除組件 – 2011-05-04 10:11:38