У меня проблемы с добавлением / удалением полей в форму ExtJS. Мой вариант использования выглядит следующим образом:
Укажите набор переключателей в форме. В зависимости от того, какой переключатель выбран, отобразите различный набор полей формы.
Я не очень хорошо знаком с ExtJS, но я занимаюсь кэшированием полей, которые нужно добавить / удалить, и добавлением / удалением их из формы при срабатывании события изменения переключателя. Вот упрощенная версия моего кода:
var textFieldA = new Ext.form.TextField({
fieldLabel: 'Text Field A',
name: 'text_field_a',
allowBlank: false
});
var textFieldB = new Ext.form.TextField({
fieldLabel: 'Text Field B',
name: 'text_field_b',
allowBlank: false
});
var form = new Ext.FormPanel({
autoScroll: true,
bodyStyle: 'padding: 5px 5px 0',
border: false,
frame: true,
layout: 'form',
items: [{
xtype: 'fieldset',
fieldLabel: 'Fieldset',
autoHeight: true,
items: [{
xtype: 'radiogroup',
fieldLabel: 'Show text field',
columns: 1,
vertical: true,
items: [
{
xtype: 'radio',
boxLabel: 'Show field a',
name: 'field_to_show',
inputValue: 'a'
},
{
xtype: 'radio',
boxLabel: 'Show field b',
name: 'field_to_show',
inputValue: 'b'
}
],
listeners: {
'change': {
fn: function(radioGroup, selectedRadio) {
switch (selectedRadio.getGroupValue())
{
case 'a':
radioGroup.findParentByType('fieldset').remove(textFieldB);
radioGroup.findParentByType('fieldset').add(textFieldA);
break;
case 'b':
radioGroup.findParentByType('fieldset').remove(textFieldA);
radioGroup.findParentByType('fieldset').add(textFieldB);
break;
}
radioGroup.findParentByType('fieldset').doLayout();
}
}
}
}]
}]
});
form.render('container');
Это работает при первом выборе каждого радио, но последующие выборы не работают, как я ожидал. В Firefox возникает ошибка JavaScript:
Операция не поддерживается "код:" 9
[Прервать эту ошибку] return !! (p.compareDocumentPosition (c) & 16); в ext-base-debug-w-comments.js
В Chrome к форме будут добавляться только метки.
Я ожидаю, что это сработает неправильно?