Показать сообщение отдельно
  #1 (permalink)  
Старый 13.03.2011, 16:45
Аспирант
Отправить личное сообщение для Petja Посмотреть профиль Найти все сообщения от Petja
 
Регистрация: 13.03.2011
Сообщений: 57

combobox появляется только после физического открытия в браузере
Создаю 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);
						}
					}
				}
			}
		});
	}
}


То есть все работает, но у комбобоксов нет хранилищей (и соответственно данных) пока их не открыть. Как бы сделать чтобы были хранилища с данными изначально.

Спасибо!
Ответить с цитированием