Создаю store беру в него все данные. Так с каждым из 4-х combobox.
Затем вешаю на событие селект одного комбобокса фильтр другого (дочернего) комбобокса.
Все это работает только после того как я открыл комбобоксы и увидел в них данные. Пока я не трогал комбобоксы - выбираю в родительском какой-то пункт и открываю дочерний - и в нем все по умолчанию, не отфильтровано. Но если я открыл и закрыл один комбо и второй, а потом выбрал пункт в первом комбо - то фильтр работает.
Такое впечатление, что комбо на экране есть, но их пока нет, нет у них store, а появляется, только если открыть комбо.
Подскажите что сделать чтобы при открытии страницы в браузере комбо инициализировались сразу вместе с store ?
Заранее спасибо!
Вот код:
Ext.onReady(function(){
obj.init();
})
var obj = {
body: '',
ostore: {},
init: function(){
this.body = Ext.get('widget');
this.makeData();
this.CreateStoreAndCombo('country');
this.CreateStoreAndCombo('okrug');
this.CreateStoreAndCombo('oblast');
this.CreateStoreAndCombo('city');
},
makeData: function(){
obj.StoreObj = new Ext.data.JsonStore({
fields: ['pid', 'type', 'lexicon_key', 'lctn_name'],
root: 'data',
});
Ext.Ajax.request({
url: '/assets/components/cuz_regions/connector.php?action=getall',
method : 'POST',
success : function(response) {
var responseData = Ext.util.JSON.decode(response.responseText);
obj.StoreObj.loadData(responseData);
},
failure: function(){
alert('Error!');
}
});
},
CreateStoreAndCombo: function(name){
switch (name) {
case 'country':
var child = 'okrug';
var emptyText = 'Выберите страну';
break;
case 'okrug':
var child = 'oblast';
var emptyText = 'Выберите округ';
break;
case 'oblast':
var child = 'city';
var emptyText = 'Выберите область';
break;
case 'city':
var emptyText = 'Выберите город';
break;
}
obj.ostore[name] = Ext.apply({}, this.StoreObj);
//obj.ostore[name].load();
new Ext.form.ComboBox({
renderTo: this.body,
id:'combo_' + name,
width:300,
typeAhead: true,
autoLoad: true,
mode: 'local',
triggerAction: 'all',
emptyText: emptyText,
selectOnFocus: false,
editable: true,
valueField:'lexicon_key',
displayField:'lctn_name',
enableKeyEvents: true,
store: obj.ostore[name],
listeners: {
scope: obj,
select: {
fn:function(combo, value) {
if (name != 'city') {
var combo_obj = Ext.getCmp('combo_' + child);
alert('combo_' + child);
var rrr2 = new RegExp("^" + combo.getValue() + "$", "");
combo_obj.store.filter('pid', rrr2);
alert(rrr2);
}
}
}
}
});
}
}
То есть все работает, но у комбобоксов нет хранилищей (и соответственно данных) пока их не открыть. Как бы сделать чтобы были хранилища с данными изначально.
Спасибо!