2

我正在使用 Bloodhound 的remote选项为 Typeahead.js 0.10.2 中的 Typeahead 自动完成提供建议。url当我使用远程选项发出单个 ajax 请求时,一切正常;

我可以使用该filter选项来操作建议,并且 Typeahead 正在正确填充。

但是,我需要 Bloodhound 实例 (1) 发出 ajax 请求remote然后(2) 发出各种后续 ajax 请求以收集有关响应的更多信息,并在将值显示给用户之前进一步调整它们。

Remote 的 ajax 请求根据用户输入的内容在 tmdb 中搜索电视节目,而我随后的 ajax 请求将收集有关每个电视节目结果的更多信息,以便我可以向用户提供更好的自动完成建议。

我的过滤器函数当前发出那些后续的 ajax 请求,适当地调整建议,并构建一个对象数组。

问题是如何让过滤器函数将该数组返回给 Bloodhound。就目前而言,我已经尝试过使用defferedssetTimeout函数(毫无疑问,不熟练),但我得到的自动完成建议只是“未定义”。

我已经进行了广泛的搜索,并且我知道您不能简单地返回 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
4

0 回答 0