2014-02-08 11 views
5

Hoffentlich ist dies nicht ein Duplikat: Why does bloodhound.get() return undefined?Warum sind die Tippvorschläge nicht definiert?

Ich habe ein Upgrade auf typeahead.js Version 0.10.0. Frühere Versionen haben die Vorschläge ordnungsgemäß zurückgegeben. Jetzt bin ich eine undefined Rückkehr mit dem folgenden Code bekommen:

// instantiate the bloodhound suggestion engine 
var engine = new Bloodhound({ 
    datumTokenizer: function (d) { return [d]; }, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    local: ["(A)labama", "Alaska", "Arizona", "Arkansas"] 
}); 

// initialize the bloodhound suggestion engine 
engine.initialize(); 

$('#typeahead').typeahead(null, { 
     source: engine.ttAdapter() 
    }); 

Hier ist meine Geige: http://jsfiddle.net/ucUcn/6/

Irgendwelche Ideen, warum dies geschieht?

Antwort

7

Das Array local muss Objekte enthalten, keine Strings selbst.

// instantiate the bloodhound suggestion engine 
 
var engine = new Bloodhound({ 
 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('d'), 
 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
 
    local: [{ 
 
    d: "(A)labama" 
 
    }, { 
 
    d: "Alaska" 
 
    }, { 
 
    d: "Arizona" 
 
    }, { 
 
    d: "Arkansas" 
 
    }] 
 
}); 
 

 
// initialize the bloodhound suggestion engine 
 
engine.initialize(); 
 

 
$('#typeahead').typeahead(null, { 
 
    displayKey: 'd', 
 
    source: engine.ttAdapter() 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="http://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script> 
 
<input id="typeahead" />

Fiddle mit oben fix:

JsFiddle

+0

Es funktioniert großartig, wenn Sie einen 'A' geben, aber wenn Sie eingeben 'Ar' es verschwindet –

+1

@JPHellemons Hoppla! Ich habe es repariert. Sehen Sie den aktualisierten Link –

+0

sieht es so aus, als ob mein Link zu typeahead auf die neuste Version zeigt und da waren brechende Änderungen. Ich werde die aktualisierte Version verlinken, weil Sie in einer idealen Welt die aktualisierte Version verwenden würden. –

1

@Chad Wie gesagt, ist das Ergebnis Array muss Objekte enthält.

Ich wollte nur, dass die den Vorschlag value ist

So könnte man so etwas tun, um anzuzeigen verwendete Standardwert hinzufügen

var suggestionEngine = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    remote: { 
     url: "myUrl", 
     filter: function (suggestions) { 
      var mappedResult = $.map(suggestions[1], function(suggestion) { 
       return { value : suggestion } 
      }); 

      return mappedResult; 
     } 
    } 
}); 
Verwandte Themen