関数から返されるキャッシュ可能な結果を達成しようとするために、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
手順を使用することはできません。