У меня есть форма с несколькими полями со списком, которые прикреплены к удаленным хранилищам:
Ext.define('app.ux.form.MyCombo', {
extend: 'Ext.form.field.ComboBox',
alias: 'widget.mycombo',
store: this.store,
displayField: 'displayField',
valueField: 'valueField',
forceSelection: true,
autoSelect: true,
initComponent: function() {
this.addEvents('selectitem');
this.enableBubble('selectitem');
this.callParent(arguments);
this.listeners = {
change: function(field, value) {
this.fireEvent('selectitem', field, value);
}
}
}
})
fieldLabel: 'DisabilityType',
name: 'f_disability_type',
xtype: 'combo',
valueField: 'valueField',
displayField: 'displayField',
forceSelection: true,
autoSelect: true,
store: 'DisabilityTypes'
DisabilityTypes — это базовое хранилище Ext.data.store, для autoLoad которого задано значение false, а для autoSync — значение true. Когда вы нажимаете на раскрывающийся список, привязанный к магазину, магазин загружается и показывает список значений.
Когда я вызываю loadRecord для объекта BasicForm, который содержит это раскрывающееся меню, и передаю ему модель, он заполняет поля со списком, которые используют локальные хранилища, но не загружает поля со списком, которые используют удаленные хранилища. Это связано с тем, что либо хранилище поля со списком не загружено (autoLoad: false), либо поле со списком загружается ПОСЛЕ загрузки формы (autoLoad: true).
Я знаю, что это была проблема в Ext 3.3.x и что для ее устранения был создан плагин:
/**
* When combo box is used on a form with dynamic store (remote mode)
* then sometimes the combobox store would load after the form data.
* And in that case the setValue method of combobox will not
* set the combobox value properly. This override makes sure that the
* combobox store is completely loaded before calling the setValue method.
*/
Ext.override(Ext.form.ComboBox, {
setValue : function(v){
var text = v;
if(this.valueField){
if(!Ext.isDefined(this.store.totalLength)){
this.store.on('load', this.setValue.createDelegate(this, arguments), null, {single: true});
if(this.store.lastOptions === null){
var params;
if(this.valueParam){
params = {};
params[this.valueParam] = v;
}else{
var q = this.allQuery;
this.lastQuery = q;
this.store.setBaseParam(this.queryParam, q);
params = this.getParams(q);
}
this.store.load({params: params});
}
return;
}
var r = this.findRecord(this.valueField, v);
if(r){
text = r.data[this.displayField];
}else if(this.valueNotFoundText !== undefined){
text = this.valueNotFoundText;
}
}
this.lastSelectionText = text;
if(this.hiddenField){
this.hiddenField.value = v;
}
Ext.form.ComboBox.superclass.setValue.call(this, text);
this.value = v;
}
});
Исправлена ли эта проблема в Ext 4? Или мне нужно найти другой плагин, совместимый с Ext 4?