1

関数から返されるキャッシュ可能な結果を​​達成しようとするために、Bloodhound で TypeAhead を使用しています。

背後にある考え方は次のとおりです。

  • TypeAhead はブラッドハウンドを呼び出します
  • Bloodhound は関数を呼び出して結果を返します
  • Bloodhound はこれらの結果をキャッシュし、TypeAhead に返します。
  • TypeAhead はそれらの結果を表示します
  • ユーザーは入力に追加するため、TypeAhead は BloodHound を呼び出して、DB への別の呼び出しではなく、キャッシュされた結果を検索します。
  • ユーザーがテキストボックスをクリアし、TypeAhead と BloodHound をリセットする

現在、ユーザーが入力を変更するたびに結果関数から直接 TypeAhead を呼び出しています。

jQuery(element).typeahead({
    hint: true,
    highlight: true, // This is to bold words that match the query
    minLength: 3
}, {
    name: "result",
    displayKey: "value",
    source: function (query, callback) {

        typeaheadResults(query, callback);

    }
});

ただし、BloodHound に結果を取得してもらいたい...あまり経験がなく、次のことを試しました。

var bhResults = new Bloodhound({
    datumTokenizer: function (d) { return Bloodhound.tokenizers.whitespace(d.num); },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    local: // What do I do here? function typeaheadResults needs the 'query'
});

typeaheadResults は非常に多くのことを行うので、単純に BloodHound のremote手順を使用することはできません。

4

1 に答える 1

1

私もこの問題に遭遇したばかりで、次のように修正しました。

var bhResults = new Bloodhound({
    datumTokenizer: function (d) { return Bloodhound.tokenizers.whitespace(d.num); },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    local: []
});

typeaheadResults(/* you don't need a query with bloodhound */, function(result){ bhResults.add(result); });

bhResults.initialize();

jQuery(element).typeahead({
    hint: true,
    highlight: true, // This is to bold words that match the query
    minLength: 3
}, {
    name: "result",
    displayKey: "value",
    source: bhResults.ttAdapter()
});
于 2014-07-30T16:24:56.863 に答える