extJS. Destroy и Render полей формы
Здравия.
У меня есть форма, в которой используются свои combobox-ы. Надо при выборе в первом select-е подгружать данные из базы во второе в зависимости от выбранного варианта в первом. С подгрузкой мне помог Сергей. Мне удалось сделать так, чтобы при выборе в первом поле во второе подгружались нужные варианты выбора. Однако если мы первый раз подгрузили в это поле данные, то второй раз они внешне никак не обновляются, хотя значения обновляются. Я так понял для этого надо разрушить и отрендерить поле заново. А вот как это сделать? Я получил нужное поле при событии select в первом Ext.getCmp( config.id +'-version'), выполняю в нём метод destroy(), а далее он уже не выполняет метод render(). Поле не появляется.
Вот код моих полей в форме:
У меня есть форма, в которой используются свои combobox-ы. Надо при выборе в первом select-е подгружать данные из базы во второе в зависимости от выбранного варианта в первом. С подгрузкой мне помог Сергей. Мне удалось сделать так, чтобы при выборе в первом поле во второе подгружались нужные варианты выбора. Однако если мы первый раз подгрузили в это поле данные, то второй раз они внешне никак не обновляются, хотя значения обновляются. Я так понял для этого надо разрушить и отрендерить поле заново. А вот как это сделать? Я получил нужное поле при событии select в первом Ext.getCmp( config.id +'-version'), выполняю в нём метод destroy(), а далее он уже не выполняет метод render(). Поле не появляется.
Вот код моих полей в форме:
{
xtype: 'hostpanel-combo-cms',
fieldLabel: _('hostpanel_site_cms'),
name: 'cms',
id: config.id +'-cms',
anchor: '100%',
listeners: {
'select': {
fn: function (o) {
var hostpanel_combo_version = Ext.getCmp( config.id +'-version');
hostpanel_combo_version.store = new Ext.data.JsonStore({
id: 0,
root: 'results',
totalProperty: 'total',
autoLoad: true,
fields: ['value', 'display'],
url: hostPanel.config.connector_url,
baseParams: {
action: 'mgr/settings/getlist',
key: 'version',
parent: o.value,
},
});
hostpanel_combo_version.destroy();
setTimeout(function(){
hostpanel_combo_version.render();
},1000);
}, scope:this
},
},
}, {
xtype: 'hostpanel-combo-version',
fieldLabel: _('hostpanel_site_version'),
name: 'version',
id: config.id +'-version',
anchor: '100%',
} Комментарии: 12
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Дал направление для самостоятельной попытки. Если не получится, пиши.
GetList процессор у меня уже обрабатывает ограничения по полю parent на основании value.o (значения, выбранного в первом combobox-е). Даже больше — он отдаёт в ExtJS нужные мне данные. Только вот отобразить во втором combobox-е я их пока не могу.
Получается вот так:
Тут я кликаю на выпавший пункт, а он мне показывает выбранным совсем другой, тот, который подгрузил мне GetList.
Я создаю свой комбобокс, мне надо, чтоб при выборе отображался один текст, а на сервер уходили только значения. Вот код комбобокса:
Проблема в том, что на сервер уходит текст displayField: 'display', а не значение valueField: 'value'. В доках смотрел и не нашёл такого параметра. Может ты знаешь, как это решить?
P.S.: Если в displayField подставляем 'value', то сохраняет правильно. Но так не надо.
Только теперь, если не кликнул на второе поле перед тем, как выбрал что-нибудь в первом, в консоли вылазит вот такая ошибка:
И вылазит до тех пор, пока не кликнем на втором поле. Не знаешь, что на это влияет?
Учусь на этом примере, то же самое вылезло, что не удивительно )
Работает всё нормально.