A ComboBox kétféleképpen szűrheti az adatait, helyben azaz kliens oldalon, és távol azaz szerver oldalon. (mode: local, remote) Első előnye, hogy gépelés közben nem kell a szerverre várni az ajánlások miatt, míg másodiknak, hogy először akkor töltődik be az adat, amikor arra valóban szükség van. (oké, ez egy kicsit egyszerűsített összehasonlítás lett...)
Egy apró kiegészítéssel megoldható, hogy a kliens oldali rendezést használva is csak akkor töltsük be az adatokat, amikor arra valóban szükség van. Ezt a szűrést a doQuery függvény végzi, amit az alábbi módon írhatunk felül:
if ( this.store.lastOptions ) {
Ext.form.ComboBox.prototype.doQuery.apply(this, arguments);
} else {
this.store.load({
callback: this.doQuery.createDelegate(this, arguments)
});
}
}
Ha volt már lekérés, akkor az alapértelmezett doQuery-t kell meghívni, ha nem volt még, akkor a store töltse be az adatokat, majd utána hívja meg ismét a doQuery-t.
Egy teljes példa:
width: 200,
renderTo: Ext.getBody(),
mode:'local',
displayField: 'display',
valueField: 'value',
store: new Ext.data.JsonStore({
url: 'json.txt',
fields: ['value', 'display']
}),
doQuery: function() {
if ( this.store.lastOptions ) {
Ext.form.ComboBox.prototype.doQuery.apply(this, arguments);
} else {
this.store.load({
callback: this.doQuery.createDelegate(this, arguments)
});
}
}
});