Sebastian
S.
Administrator
Systemów Linux /
Administrator sieci
/ Prog...
Temat: Dwa zależne comboboxy [bug?]
Witam wszystkich.Dopiero zacząłem przygodę z ExtJS więc całkiem możliwe, że pytam o oczywiste rzeczy ale nie mogę znaleźć rozwiązania problemu. Korzystam z ExtJS w wersji 4.1.1
Mam dwa comboboxy: Powiat oraz Gmina.
Co chcę osiągnąć? Po wybraniu powiatu, w combo gmina jest wyświetlana lista gmin z danego powiatu.
Listę powiatów otrzymuję po wykonaniu skryptu: proxy.php?model=Powiat
Listę gmina otrzymuję po wykonaniu skryptu: proxy.php?model=Gmina&PowiatID=x
gdzie x to numer powiatu pobrany z listy (combo powiat)
Combobox Powiat:
var powiat = Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Powiat:',
editable: false,
emptyText: '--wybierz--',
triggerAction: 'all',
mode: 'remote',
store: Ext.create('Ext.data.Store', {
fields: ['PowiatID', 'Nazwa'],
proxy: {
type: 'ajax',
url : 'proxy',
extraParams: {
model: 'Powiat'
}
}
}),
valueField: 'PowiatID',
displayField: 'Nazwa',
listeners: {
select: function(combo, record, index) {
gmina.enable();
gmina.getStore().reload({params:{model: 'Gmina',PowiatID: combo.getValue()}});
}
}
});
Combobox Gmina:
var gminaStore = Ext.create('Ext.data.JsonStore', {
fields: ['GminaID', 'Nazwa'],
proxy: {
type: 'ajax',
url : 'proxy',
}
});
var gmina = Ext.create('Ext.form.ComboBox', {
disabled: true,
editable: false,
fieldLabel: 'Gmina:',
emptyText: '--wybierz--',
triggerAction: 'all',
mode: 'remote',
store: gminaStore,
valueField: 'GminaID',
displayField: 'Nazwa',
});
W czym problem? Nie działa za pierwszym razem.
Odświeżam stronę, z listy powiatów wybieram interesujący powiat, lista gmina jest pusta.
Ponowne wybranie innego powiatu i lista gmin jest prawidłowa.
Po przeanalizowaniu (firebug) działania kodu, zauważyłem następującą rzecz. Przy pierwszym kliknięciu na listę (Gmina) następuję ładowanie storeGmina (ponieważ nie są domyślnie ustawione parametry: model i PowiatID) skrypt proxy.php nic nie zwraca. Przy każdym kolejnym (po ponownym wybraniu powiatu) kliknięciu combo Gmina, storeGmina nie jest "inicjalizowane" (?) ale posiada dane załadowane za pomocą
gmina.getStore().reload({params:{model: 'Gmina',PowiatID: combo.getValue()}});
Wskazówka:
Jeśli gminaStore zdefiniuję w taki sposób:
var gminaStore = Ext.create('Ext.data.JsonStore', {
fields: ['GminaID', 'Nazwa'],
proxy: {
type: 'ajax',
url : 'proxy',
extraParams: {
model: 'Gmina',
PowiatID: '1'
}
}
});
to po wyborze powiatu i kliknięciu combo gmina, widzę (przez ułamek sekundy widać ładowanie), że najpierw ładuje prawidłowe dane a po chwili następuje załadowanie tych domyślnych (extraParams: {model: 'Gmina', PowiatID: '1' })
Jak z tym sobie poradzić?