ExtJs динамически строят formpanel из записи хранилища данных - PullRequest
6 голосов
/ 04 мая 2011

Я пытаюсь динамически заполнить ExtJs FormPanel из записи хранилища данных. Когда пользователь щелкает строку в GridPanel, вызывается метод buildForm и отправленная по нажатию запись передается в качестве первого аргумента.

Приведенный ниже код (при отладке) работает, но метод 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 Ответ

5 голосов
/ 04 мая 2011

Правильный способ добавления компонентов в форму - использовать метод add().Если ваша форма уже обработана, используйте метод add(), а затем вызовите doLayout().

Так что вы можете попробовать это:

form.add(formItems);
form.doLayout(false,true);
form.loadRecord(record);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...