2013-05-13 15 views
5

Twitters Typeahead corrisponde a qualsiasi parola in una frase, quindi per una ricerca di risultati "auto" può provenire da una frase con una seconda parola che corrisponde a "auto". Ad esempio quando si cerca l'auto in una lista con un biglietto da visita. Il biglietto da visita appare e, peggio ancora, compare prima dell'auto. IE:Come creare parole e frasi esatte di Twitter Typeahead

Search Term: Car 
Suggestions: 
Business Card 
Car 
Car Pool 
Carbon 

voglio che sia più Google e Twitter come (non hanno mai suggeriscono qualcosa che non corrisponde esattamente ciò che viene digitato dall'inizio) dove la parola digitata è il più rilevante, in modo da auto sarebbe più rilevante quando si digita auto rispetto a Business Card.

Voglio che in realtà basta ARRESTARE la seconda parola finché qualcuno non digita uno spazio e inizia una seconda parola. Quindi, nell'esempio biglietto da visita di cui sopra non sarebbe apparso nella lista a meno che non ho digitato:

Business C 

Come posso fermare questo comportamento di corrispondenza e suggerendo parole che non sono una corrispondenza esatta dall'inizio della ricerca digitato.

Un altro modo per dire questo sarebbe come fermare il typeahead da tokenizing o splitting nello spazio. Il typeahead corrisponde sempre dall'inizio di una parola (^), quindi se lo spazio non fosse riconosciuto come un limite di parole, funzionerebbe di più come gli utenti di Google e dei twitters si aspetterebbero.

Grazie per qualsiasi aiuto, Tyler

AGGIORNAMENTO 1.

ho aggiornato il mio set di dati per restituire un dato che ha un valore di token e in modo che il metodo typeahead _transformDatum non tokenize i gettoni, dividendo su Uno spazio. Questa grande opera e ora funziona come desiderato:

Valori: Apple, Great Ape

Termine di ricerca: Ap Suggerimenti: di Apple

Questo è quello che voglio. Ma ora c'è un nuovo problema.

PROBLEMA: quando si utilizza un termine di ricerca con uno spazio non vengono restituiti suggerimenti.

Così ora quando si digita "grandi" i suggerimenti fermano non appena si digita una spazio .:

termine di ricerca: Grande (con uno spazio) suggerimenti: (nessuno)

I Sto pensando che i token NON possono avere spazi. Anche se la documentazione non lo dice esplicitamente in un problema:

La forma canonica di un dato è un oggetto con una proprietà di valore e un gettoni di proprietà. value è la stringa che rappresenta il valore sottostante del datum e token è una raccolta di stringhe che supportano typeahead.js nei datum corrispondenti con una determinata query.

+0

ho risolto il problema di spazio si modifica il metodo 'getSuggestion' (https://github.com/twitter/typeahead js/blob/master/src/dataset.js # L251). Ho rimosso la chiamata a 'tokenizeQuery' semplicemente applicando' toLowerCase() 'alla query. – franzlorenzon

risposta

1

Puoi

$('.typeahead').typeahead({source:myarray, matcher: function(item){ 
    var reg = new RegExp('^'+this.query); 
    if(item.match(reg)) return true; 
    else return false; 
}}) 
+0

Grazie per la risposta e mi dispiace non aver chiarito meglio, ma questo è Typeahead.js di Twitter non associato a bootstrap. Ho aggiornato il mio post per chiarire. –

1

apt sarebbe:

matcher: function (item) { 
     if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) == 0) { 
      return true; 
     } 
    }, 
+0

la tua risposta riguarda la typeahead distribuita con twitter bootstrap v2 (bootstrap v3 non ha typeahead). La domanda riguarda twitter typeahead, un prodotto diverso. – jrochkind

Problemi correlati