我正在使用 Bloodhound 的remote
选项为 Typeahead.js 0.10.2 中的 Typeahead 自动完成提供建议。url
当我使用远程选项发出单个 ajax 请求时,一切正常;
我可以使用该filter
选项来操作建议,并且 Typeahead 正在正确填充。
但是,我需要 Bloodhound 实例 (1) 发出 ajax 请求remote
,然后(2) 发出各种后续 ajax 请求以收集有关响应的更多信息,并在将值显示给用户之前进一步调整它们。
Remote 的 ajax 请求根据用户输入的内容在 tmdb 中搜索电视节目,而我随后的 ajax 请求将收集有关每个电视节目结果的更多信息,以便我可以向用户提供更好的自动完成建议。
我的过滤器函数当前发出那些后续的 ajax 请求,适当地调整建议,并构建一个对象数组。
问题是如何让过滤器函数将该数组返回给 Bloodhound。就目前而言,我已经尝试过使用deffereds
和setTimeout
函数(毫无疑问,不熟练),但我得到的自动完成建议只是“未定义”。
我已经进行了广泛的搜索,并且我知道您不能简单地返回 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