1. ホーム
  2. jquery

[解決済み] なぜbloodhound.get()は未定義を返すのですか?

2022-02-12 23:09:13

質問

以下のコードを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'));

実際、私はこの問題を解決しようとしています。 https://github.com/bassjobsen/Bootstrap-3-Typeahead/issues/26 私は、以下のようなことが可能であると期待していました。

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

更新

.使用 ttAdapter() で、typeaheadのソースを設定します。 また、この関数は source プロパティ(文字列の配列または関数を受け取る)を使用します。 ブートストラップ3-タイプアヘッド :

// 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が表示されます。

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

だから ttAdapter() は、クエリを引数に持つ source で設定可能な関数 (get()) を返します。

どのように解決するのですか?

Bloodhound.get()を以下のように実装してみました(こちらの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);
    });
});

あなたの呼び出した "get()" の問題、すなわち。

numbers.get('a')

つまり、Bloodhoundに'a'のクエリを実行させる一方で、その結果に対して何もしていないのです。get()" に何か有用なことをさせるためには、結果を出力関数に送る必要があります。以下はその例です。 のドキュメントはこちら .