2011-05-04 53 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