2010-09-06 9 views
22

Desidero implementare una funzionalità di ricerca diretta o suggerimenti di ricerca in un'applicazione Web che utilizza Dojo Framework. Sarebbe simile al modo in cui le ricerche di Google e Bing visualizzano le corrispondenze durante la digitazione: quando digiti nella casella di ricerca, viene visualizzato un elenco di potenziali corrispondenze. Le ricerche verrebbero eseguite lato server, con i risultati restituiti al browser utilizzando AJAX.Come si possono implementare i suggerimenti di ricerca/ricerca live utilizzando Dojo?

Qualcuno sa di un buon modo per implementare questo utilizzando Dojo?

Ecco alcune possibili opzioni:

  • Il built-in widget di dijit.form.ComboBox
    Questo ha funzionalità molto simili, ma ho visto solo utilizzato con insiemi di dati limitati. Gli esempi utilizzano sempre elenchi di piccole dimensioni (come i 50 stati negli Stati Uniti) e precaricano l'intero set di dati per il filtraggio sul lato client. Tuttavia, presumo che potrei collegarlo a un dojox.data.JsonQueryRestStore per la ricerca lato server - qualcuno può confermare se funziona?

  • QueryBox http://marumushi.com/code/querybox/
    questa implementazione non principalmente il lavoro, ma ha alcuni bug minori e non guardare come è in fase di manutenzione. Dovrei fare alcune correzioni sul codice prima di usarlo.

  • Medryx http://blog.medryx.org/2008/09/10/dijitsearch-part-2/
    Questo appare anche come si fa il lavoro, ma è descritto come codice 'a livello alpha' e il link per il codice sembra essere rotto ...

Probabilmente potrei fare uno dei suddetti lavori, ma mi piacerebbe sapere se ci sono alternative migliori là fuori.

+0

Ciao. Sto cercando di fare lo stesso e ho visto questo post. Qualche possibilità di pubblicare il tuo codice per Dojo 1.5/6? – Ayyoudy

risposta

11

ho implementato che 5 anni fa, quando era al Dojo 0.2:

Mentre il codice è antica, è banale, e spero che vi darà idee su come attaccalo. L'abbozzo:

  • Collegare un gestore di eventi per la vostra casella di input, che viene attivato sui cambiamenti — uso "onkeyup" per rilevare un cambiamento nella casella di immissione.
  • Attendi fino a quando l'utente ha smesso di digitare impostando un timer nel gestore eventi, se non è stato ancora impostato. 200-500 ms sono buoni tempi di attesa.
    • Il timeout gioca un duplice ruolo:
      • cui limita le nostre richieste a un server per impedire il sovraccarico.
      • Gioca sulla nostra percezione del tempo e delle nostre abitudini di battitura.
  • Se il nostro timeout è alto, e noi non aspettare per un server di invio del server ⇒ una stringa che abbiamo finora.
  • Se stiamo ancora aspettando un server, annullare la richiesta e chiedere di nuovo.
    • Questa parte è specifica per le app: non vogliamo sovraccaricare un server, e talvolta un server non può gestire bene le connessioni interrotte.
    • Nell'esempio non annullo la chiamata XHR, ma attendo che finisca prima di inviare una nuova richiesta.
  • Il server risponde con i risultati rilevanti, che vengono prontamente visualizzati.

Nel post del blog l'ho implementato come widget. Ovviamente l'imballaggio esatto dipende da te.

+0

Grazie! La tua soluzione è notevolmente vicina a quello che stavo cercando. Attualmente sto scrivendo uno script aggiornato per Dojo 1.5 e probabilmente lo posterò qui una volta che ho finito. – gutch

+0

Si prega di fare. Questo è un utile codice, che posso usare io stesso. ;-) –

+0

sapevo che questo è un vecchio post. puoi per favore condividere l'ultimo codice? Attualmente sto lavorando a una stessa funzione usando il dojo. Apprezzalo. –

Problemi correlati