Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does bloodhound.get() return undefined?

I'm trying to use the code below with typeahead.js v 0.10

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

// initialize the bloodhound suggestion engine
numbers.initialize();
console.log(numbers.get('a'));

In fact I try to solve this question: https://github.com/bassjobsen/Bootstrap-3-Typeahead/issues/26 I expected something like shown below should be possible:

 $('.typeahead').typeahead(
{
items: 4,
source:function(query){return numbers.get(query)}       
});

update

The examples. use ttAdapter() to set the source of typeahead. This function can also be used to set the source property (which accept an array of string or a function) for Bootstrap-3-Typeahead:

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

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

$('.typeahead').typeahead(
{
items: 4,
source:numbers.ttAdapter()  
});

bloodhound.js shows:

  ttAdapter: function ttAdapter() {
                return _.bind(this.get, this);
            }

So ttAdapter() returns a function (get()) which can be set by source which has the query as an argument.

like image 604
Bass Jobsen Avatar asked Dec 29 '25 20:12

Bass Jobsen


1 Answers

I implemented Bloodhound.get() as follows (also see this fiddle : http://jsfiddle.net/Fresh/HS9Wy/):

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

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

// Get an array of datums which satisfy the query for 'a'
numbers.get('a', function (suggestions) {
    jQuery.each(suggestions, function (index, item) {
        console.log(item);
    });
});

The problem with your call to "get()" i.e.

numbers.get('a')

Is that whilst you are getting Bloodhound to execute the query for 'a' you are not doing anything with the results. To instruct "get()" to do something useful you need to send the results to the output function. See the documentation here.

like image 140
Ben Smith Avatar answered Jan 01 '26 10:01

Ben Smith



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!