Sebastian S.

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ć?
Dominik Mikiewicz

Dominik Mikiewicz maps made easy,
www.cartomatic.pl ||
cartoninjas.net

Temat: Dwa zależne comboboxy [bug?]

reload( Object options )
Reloads the store using the last options passed to the load method.

load( [Object/Function options] )
Loads data into the Store via the configured proxy. This uses the Proxy to make an asynchronous call to whatever storage backend the Proxy uses, automatically adding the retrieved instances into the Store and calling an optional callback if required
Sebastian S.

Sebastian S. Administrator
Systemów Linux /
Administrator sieci
/ Prog...

Temat: Dwa zależne comboboxy [bug?]

Podałem
gmina.getStore().reload({params:{model: 'Gmina',PowiatID: combo.getValue()}});

ponieważ już próbowałem wszystkiego co mogłoby zadziałać, a wklejając kod zapomniałem poprawić.

Tak naprawdę korzystam z
gmina.getStore().load({params:{model: 'Gmina',PowiatID: combo.getValue()}});


i nie działa

EDIT (firebug):


1. GET http://localhost/SOK/public_html/proxy?_dc=1355834880986&query=&model=Powiat&page=1&start=0&limit=25

2. GET http://localhost/SOK/public_html/proxy?_dc=13558...&model=Gmina&PowiatID=22&page=1&start=0&limit=25

3. GET http://localhost/SOK/public_html/proxy?_dc=13558...=&model=Gmina&PowiatID=1&page=1&start=0&limit=25
4. GET http://localhost/SOK/public_html/proxy?_dc=13558...0&model=Gmina&PowiatID=5&page=1&start=0&limit=25


1. Wykonane po naciśnięciu combo z powiatem
2. Po wybraniu powiatu o ID=22
3. Po kliknięciu na combo gmina w celu wyświetlenia listy (wysyła PowiatID=1 a powinno PowiatID=22)
4. Po ponownym wybraniu innego powiatu
... i potem jest ok...Sebastian S. edytował(a) ten post dnia 18.12.12 o godzinie 13:52
Sebastian S.

Sebastian S. Administrator
Systemów Linux /
Administrator sieci
/ Prog...

Temat: Dwa zależne comboboxy [bug?]

Rozwiązanie:

Ext.create('Ext.form.ComboBox', {
...
lastQuery: ''
....

});


http://docs.sencha.com/ext-js/4-1/#!/api/Ext.form.fiel...Sebastian S. edytował(a) ten post dnia 18.12.12 o godzinie 14:43

Podobne tematy


Następna dyskusja:

Dwa okna i linia SVG




Wyślij zaproszenie do