remote
Typeahead.js 0.10.2 の Typeahead オートコンプリートに提案を提供するために、Bloodhound のオプションを使用しています。url
リモートのオプションを使用して単一の ajax リクエストを行うと、すべてが正常に機能します。
オプションを使用しfilter
て候補を操作でき、Typeahead は正しく入力されています。
ただし、(1) ajax リクエストを作成し、(2) 後続のさまざまな ajax リクエストを作成して、応答に関する詳細情報を収集し、ユーザーに表示する前に値をさらに調整するには、Bloodhound インスタンスがremote
必要です。
Remote の ajax リクエストは、ユーザーが入力した内容に基づいて tmdb でテレビ番組を検索します。後続の ajax リクエストは、各テレビ番組の結果に関するより多くの情報を収集するため、ユーザーにより良いオートコンプリートの提案を提供できます。
私のフィルター関数は現在、これらの後続の ajax リクエストを作成し、提案を適切に調整して、オブジェクトの配列を構築しています。
問題は、フィルター関数がその配列を Bloodhound に返す方法です。deffereds
現状では、関数と関数を使用してみましたがsetTimeout
(不慣れですが、間違いありません)、オートコンプリートの提案に対して得られるのは「未定義」です。
私はSOを広範囲に検索しましたが、リクエストが完了する前に返されることが多いため、ajaxリクエストの結果を単純に返すことはできないことを認識しています。
私が知っている通常の解決策は、ajax 応答をコールバックにフィードすることですが、Bloodhound が必要とするように、コールバックがフィルター関数から配列を返すのにどのように役立つかわかりません。
私は jQuery と Coffeescript を使用していますが、以下は jQuery と Javascript を使用したコードのスケルトンです。ご指導いただきありがとうございます。
var tvTitles = new Bloodhound({
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: // working url that queries tmdb,
filter: function(shows) {
var requests = function() {...}; // function that builds and returns ajax requests
$.when.apply($, requests).done(function(){
// build array of objects for bloodhound
)};
// how to make filter return the array to bloodhound?
}
}
});
// initialize tvTitles
// call typeahead with tvTitles.ttAdapter() as source