#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()
для удаления компонентов из формы