Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

ExtJs: ComboBox – Autocomplete Google Style

Come sviluppare una ComboBox in Google Style
Come sviluppare una ComboBox in Google Style
Link copiato negli appunti

In questo articolo descriveremo metodi e proprietà di configurazione della classe Ext.Form.ComboBox,
sfruttando le potenzialità dell'oggetto con lo scopo di ottenere un widget Autocomplete che fornisca
dei suggerimenti in automatico in base al testo da inserire in un campo input. 
L'esempio classico di questa funzionalità è il campo di ricerca di Google, che sfrutta una logica sulla quale
baseremo la nostra applicazione.

Durante la progettazione di un'applicazione RIA per gestire le quotidiane operazioni CRUD su database, 
dovremmo senza dubbio fornire all'utente uno strumento non solo Cross-Browser, ma anche graficamente accativante.
Con l'avvento del web 2.0 è necessario puntare sulla semplicità e accessibilità.

Prima d'iniziare, è opportuno fare alcuni riferimenti a concetti fondamentali della libreria ExtJs
uno su tutti è lo store, un magazzino di dati indicizzati visualizzabile solamente dopo il rendering dell'oggetto.

Possiamo considerare lo store il cuore della ComboBox, alimentato dinamicamente lato server,
soluzione efficiente in caso di accesso a tabelle con elevata mole di dati, o semplicemente definito in client-side,
adatto per un numero limitato di opzioni.

var Store = new Ext.data.JsonStore({
	    data : [
    		["01", "Rossi Stefano"],  ["02", "Bianchi Luca"], ["03", "Verdi Giuseppe"]  //Insieme di coppie nome/valore
	    ],
    	fields : ["id", "name"]  //Identifico I dati all'interno della struttura
    });

è facile intuire come l'esempio qui sopra descriva un deposito dati statico.

Integriamo ora la struttura appena vista nella definizione
della ComboBox client-side su cui stiamo lavorando, tenendo conto di
fondamentali proprietà per ottimizzare al massimo l'efficienza di questa
classe. Un quadro completo su metodi ed eventi è possibile consultarlo nelle API di ExtJs, 
oggi invece ci limiteremo a studiare le parti fondamentali in modo da terminare lo sviluppo del nostro progetto.

//Creazione dell'istanza ComboBox
    var combo = new Ext.form.ComboBox({
        id: 'cmbRicerca',
        width: 400,
        x: 30,
        y: 50,
        emptyText: 'Ricerca...',
        fieldLabel: 'Descrizione Anagrafica',
        hideTrigger: true,
        minChars: '1',
        triggerAction: 'all',
        typeAhead: true,
        editable: true,
        mode: 'remote',
        displayField: 'name',
        valueField: 'id',
        store:  new Ext.data.JsonStore({
            url: 'retriveStore.php,
            root: 'rootStore',
            fields: ['id','name']
        })
    });

Termine Descrizione
id identificativo univoco per accedere al componente
width dimensione orizzontale in pixel
x, y coordinate asse ascisse/ordinate (posizionamento della combo nel layout)
emptyText testo di default nella combobox prima che prenda il focus
fieldLabel etichetta descrittiva
hideTrigger pari a "true" per nascondere il "grilletto" della combo ed ottenere visivamente un textfield
minChars numeri minimo di caratteri che l'utente deve digitare prima che venga
attivata la richiesta al server per il load dello store
triggerAction pari a "all" per eseguire query su tutti i dati
typeAhead è "true" per popolare in autocomplete il resto del testo
editable rende la combobox un input text editabile
mode pari a "remote" per il caricamento automatico dello store da server-side

Le proprietà displayField e valueField sono il fulcro del
collegamento tra l'oggetto ComboBox e lo store dei dati. Durante la creazione dello store in
server-side attraverso una richiesta definita nella url,
costruiremo un array di coppie nome=valore in nesso alla configurazione fields e non dimentichiamo il punto di accesso (root).
Di conseguenza le stesse specifiche determinano quale valore venga visualizzato nella ComboBox (displayField)
e quale dei due valori viaggi nelle richieste http (valueField) da utilizzare,
per esempio, come parametro di ricerca sul db.

A questo punto non resta altro che eliminare la scritta "loading"
che appare ogni volta digitiamo un carattere nella ComboBox, attraverso
l'utilizzo di questa override:

Ext.override(Ext.form.ComboBox, {
    	onBeforeLoad:  function() { this.selectedIndex = -1; }
    });

un effetto grafico accettabile per una combobox statica in cui la
scelta è limitata visualizzando tutte le opzioni alla prima richiesta.
Questo è il risultato ottenuto.

Figura 1. ExtJS ComboBox
Nuovo Progetto in Flex

Consigliamo di ottimizzare al massimo i tempi di risposta
per evitare ritardi di elaborazione che influiscono sul risultato visivo
desiderato, senza inviare più richieste non significanti al server e
ottimizzando le query da lanciare sul database. L'utlizzo di FireBug è
in grado di fornire tutte queste informazioni in modo da migliorare la nostra applicazione.

Ti consigliamo anche