2013-05-13 7 views
5

Twittern Typeahead passt irgendein Wort überall in einer Phrase also für eine Suche nach "Auto" Ergebnissen kann von einer Phrase mit einem zweiten Wort kommen, das "Auto" zusammenbringt. Zum Beispiel bei der Suche nach einem Auto in einer Liste mit Visitenkarte. Visitenkarte erscheint und noch schlimmer erscheint es vor dem Auto. IE:Wie man Twitter TypeAehead exakte Übereinstimmung Wörter und Phrasen macht

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

Ich will es mehr Google und Twitter sein wie (sie legen nahe, nie etwas, das nicht genau passend, was von Anfang an eingegeben wird), wo das eingegebene Wort das relevanteste ist, so Auto wäre relevanter beim Tippen Auto als Visitenkarte.

Ich möchte, dass es tatsächlich nur STOP das zweite Wort entspricht, bis jemand ein Leerzeichen eingibt und ein zweites Wort startet. So im obigen Beispiel Visitenkarte würde nicht in der Liste angezeigt, wenn ich getippt:

Business C 

Wie kann ich dieses Verhalten von passenden und was darauf hindeutet, Worte zu stoppen, die keine exakte Übereinstimmung von Anfang an der typisierten Suche sind.

Eine andere Möglichkeit, dies zu sagen, wäre, wie man die Typeahead davon abhält, Tokenizing oder Splitting auf dem Space durchzuführen. Der typeahead passt immer vom Anfang eines Wortes (^), wenn also das Leerzeichen nicht als Wortgrenze erkannt wurde, würde es mehr funktionieren, als Google und Twitterer erwarten würden.

Vielen Dank für jede Hilfe, Tyler

UPDATE 1.

ich meinen Datensatz aktualisiert ein Datum zurückzugeben, das einen Wert hat und Token, so dass die typeahead _transformDatum Methode tokenize nicht die Token durch Aufspalten auf ein Leerzeichen. Dies funktioniert gut, und jetzt funktioniert es wie gewünscht:

Werte: Apple, Great Ape

Suchbegriff: Ap Vorschläge: Apple-

Dies ist, was ich will. Aber jetzt gibt es ein neues Problem.

PROBLEM: Bei Verwendung eines Suchbegriffs mit Leerzeichen werden keine Vorschläge zurückgegeben.

jetzt Also, wenn ich "groß" geben stoppen die Vorschläge, sobald ich ein Leerzeichen .:

Suchbegriff: Große (mit Leerzeichen) Vorschläge: (none)

I Ich denke, dass Tokens KEINE Leerzeichen haben dürfen. Auch wenn die Dokumentation ausdrücklich dies nicht in einer Ausgabe sagen:

Die kanonische Form eines Datums ist ein Objekt mit einem Wert Eigenschaft und ein Token Eigenschaft. value ist die Zeichenkette, die den zugrunde liegenden Wert des Datums darstellt. tokens ist eine Sammlung von Zeichenketten, die typeahead.js in übereinstimmenden Daten mit einer bestimmten Abfrage unterstützen.

+0

ich den Raum Ausgabe Bearbeitung des Verfahrens gelöst haben 'getSuggestion' (https://github.com/twitter/typeahead .js/blob/master/src/Dataset.js # L251). Ich entfernte den Aufruf von 'tokenizeQuery', indem ich' toLowerCase() 'auf die Abfrage anwendete. – franzlorenzon

Antwort

1

Sie können

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

Vielen Dank für die Antwort und es tut mir leid, dass ich nicht besser geklärt habe, aber dies ist Twitter's Typeahead.js nicht mit Bootstrap verbunden. Ich habe meinen Beitrag aktualisiert, um zu klären. –

1

apt wäre:

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

Ihre Antwort bezieht sich auf die mit twitter bootstrap v2 verteilte typeahead (bootstrap v3 hat keine typahead). Die Frage bezieht sich auf twitter typeahead, ein anderes Produkt. – jrochkind

Verwandte Themen