ComboBox.doQuery

2008.10.17. 09:20 stack

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:

doQuery: function() {
    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:

new Ext.form.ComboBox({
    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)
            });
        }
    }
});

5 komment

Címkék: combobox

A bejegyzés trackback címe:

https://extjs.blog.hu/api/trackback/id/tr44718277

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Vad Viktor · http://vad-viktor.blogspot.com/ 2008.12.02. 15:52:47

Üdv! Majdnem ilyesmit keresek. Tulajdonképpen nekem van egy combo-m, aminek a RawValue értékét ismerem és kérem le egy store-ban. Ez egy szám id. Ehhez az id-hez tartozó nevet szeretném megjeleníteni a combo-ban amint rendelkezésre áll az id.

Csak hogy értsük a folyamatot:
ajax lekérdezés => json válasz az id-val => most kéne valamit csinálni, hogy az id-t értékként megkapja a combo alsó rétege és lekérdezze a nevez a saját store-jával (remote)

Sajnos akárhogy csavargatom, nem találtam még ki melyik eseményhez csatoljam az utolsó lépést és főleg milyen függvényekkel csikarjam ki belőle.

Minden segítséget előre is köszönök!

stack 2008.12.02. 21:25:32

Szia, nem egészen világos, hogy pontosan mi a cél?

A store-t üríteni a store.removeAll() -lal lehet, és új elemet meg a store.add( new Ext.data.Record({...}) ) utasítással lehet. Erre gondoltál?

Vad Viktor · http://vad-viktor.blogspot.com/ 2008.12.03. 09:15:34

Hali!

Nem ezt próbáltam kihozni, igyekszem rendesen elmagyarázni :)

Vegyünk egy mezei combo box-ot. Vegyünk egy tőle független store-t. Ez a store kigyűjt részadatokat, melynek egy rekordja adja meg azt az id-t amit a combo-nak használnia kell, és az alapján a saját store-jával lekérdezni a megjelenítendő adatot. Pl, a különálló store egy rekordja tartalmazza a 3-as id-t, azt a combonak adom, mint rawvalue és ez alapján a 3-as alapján a combonak le kell kérdeznie a saját store-ját, hogy melyik név tartozik hozzá -mondjuk a felhasználó listából- és azt megjeleníteni. Mintha legördítettem volna és kiválasztottam volna egy usert.

Remélem már világosabb voltam :)

Ha rájövök a megoldásra, sztem írok róla ide.

Vad Viktor · http://vad-viktor.blogspot.com/ 2008.12.03. 12:01:13

Ok, rájöttem nagy fejtörés közepette és hatezerszer is átolvasva az API doksit, hogy amit én keresek az a setValue() függvénye a combobox-nak. Mert betöltöm a combo store-jába az új adatokat és a setValue()-val megmondom neki, hogy válassza ki azt amelyiknek az id-jét megadom. :)

Egy korábbi scriptemben már használtam ezt és nem kommenteztem az eljárást, ezért törtem a fejemet, az miért működik és az új miért nem.

Ezenfelül megtanultam még azt is, hogy nem kell beforequery eseményt feltétlen használnom a combonál, hacsak nem minden egyes legördítésnél egy vadiúj friss listát akarok. Példákból tanultam és most fejlesztem csak tovább őket ^_^

stack 2008.12.03. 15:26:14

Szia, igazából még gondoltam is, hogy a setValue-t tanácsolom. :) De arra gondoltam, hogyha egy input értékét változtatni szeretnéd, akkor elsőnek ezt nézed meg... sebaj... örülök, hogy végül megoldódott. :)

ExtJS blog, mi ez?

Az ExtJS egy JavaScript keretrendszer, melyet a blog írója elfogultan a legjobbnak tart, és ez a blog olyan apróságok gyűjteménye, melyek ExtJS használata közben felmerültek, eszébe jutottak...

Címkék

ajax (4) alignto (1) állás (3) analytics (1) anchorto (1) android (4) animate (2) array (9) auto (1) back button (1) beautifier (1) beforeevent (1) benchmark (1) blur (1) budapest.js (1) button (1) canvas (1) capture (1) case sensitive (1) center (1) change (1) cikkajánló (1) class (2) closure compiler (1) collapse (1) combobox (3) comment (1) console.log (2) contextmenu (2) core (2) count (1) css (15) csv (1) dataview (1) date (4) datefield (3) datepicker (1) debug (1) doksi (1) dragdrop (1) easing (1) eclipse (1) editor (1) element (5) error (5) eval (2) event (1) fejtörő (1) field (2) fieldset (1) filter (1) firefox (4) firefox extension (2) focus (3) fonts (1) fun (1) function (1) google (2) google chrome (1) grayscale (1) grid (4) group contact (1) header (3) height (2) hidden (1) hirek (2) history (1) htaccess (1) html5 (2) htmleditor (2) https (1) icon (3) id (2) ie (2) ie6 (1) ie9 (1) iframe (3) image (2) indexof (1) javascript (1) jquery (2) jslint (2) jsmin (1) json (7) keymap (1) kipróbálom (2) könyvajánló (2) label (1) layout (1) lint (1) log (1) loop (1) magyar (2) mandelbrot (1) mask (1) math (1) maxlength (1) mistake (1) mysql (5) napi szívás (16) nem extjs (12) node (1) nth child (1) number (1) off (5) offline (1) operator (1) override (20) pagesize (1) paging (2) panel (2) php (7) picker (1) plugin (3) pozicionálás (2) preload (1) print (1) propertygrid (1) pseudo (3) readonly (2) record (1) regexp (1) replace (1) resizable (1) rotate (1) round (1) scale (1) sencha touch (2) server (1) shuffle (1) slider (1) sort (3) sortable (1) store (2) string (7) sum (1) tabchange (1) tabpanel (1) tab key (2) tdd (1) template (1) textarea (2) textfield (1) textitem (1) theme (2) throw (1) timer (1) timestamp (1) title (2) toggle (1) toolbar (6) tools (1) total count (1) transparent (1) tree (1) treenode (1) trigger (1) truncate (1) try (1) ucfirst (1) undefined (2) unique (1) unload (1) urlencode (1) utf8 (2) verzió (1) video (1) viewer (1) viewport (2) visible (2) vtype (1) window (2) xtype (1) zindex (2)

Extjs.blog.hu - RSS

Kérdés?