ExtJS динамически создает formpanel из записи хранилища данных

#forms #extjs #dynamic

#формы #extjs #динамический

Вопрос:

Я пытаюсь динамически заполнить ExtJS FormPanel из записи хранилища данных. Когда пользователь нажимает на строку в панели сетки, вызывается метод 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:

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

Итак, вы можете попробовать это:

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

Комментарии:

1. спасибо, в таком случае, каков правильный способ удаления элементов? Поскольку мне нужно сначала очистить форму

2. вы можете использовать методы remove() или removeAll() для удаления компонентов из формы