ExtJs从数据存储区记录动态构建formpanel

时间:2011-05-04 09:54:28

标签: forms extjs dynamic

我正在尝试从数据存储记录动态填充ExtJs FormPanel。 当用户单击GridPanel中的一行时,将调用buildForm方法,并将所单击的记录作为第一个arg传入。

以下代码(调试时)似乎有效,但 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);
    }
});

1 个答案:

答案 0 :(得分:5)

向表单添加组件的正确方法是使用add()方法。如果您的表单已经呈现,请使用add()方法,然后调用doLayout()

所以你可能想试试这个:

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