Typeahead远程调用显示结果的子集

时间:2015-10-27 13:12:30

标签: autocomplete typeahead.js bloodhound

我正在尝试使用typeahead.js从我自己的服务器(flask端点)获取作者列表。当我为Bloodhound使用local来源时,一切顺利,只有当我必须从服务器获取数据时才会显示所有结果。

所以这就是代码:

var authors = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.whitespace,
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    // local: ["Aad, Georges", "Abajyan, Tatevik", "Abbott, Brad"],

    remote: {
        url: '/search/authors?q=%QUERY',
        transform: function (json) {
            var names = $.map(json.results, function (author) {
                return author.full_name;
            });
            console.log(names);
            return names;
        }
    }
});

$('#author-suggest').typeahead(null, {
    source: authors
});

我确保打印从网址返回的名称,它们似乎与我可能放入本地变量的名称相同:

$ Array [ "Aad, Georges", "Abajyan, Tatevik", "Abbott, Brad" ]
$ Array [ "Aad, Georges", "Abajyan, Tatevik", "Abbott, Brad" ]
…

当我测试它时会发生一些奇怪的事情。当我尝试输入input框时 - 我得到了建议,但它只是控制台中打印的一部分。当我输入时,它们也不会动态变化(Aad, Georges仍然是第一个建议,即使我已经在"Abbott")。

另一个特殊的事情是,并非所有的名字都被建议,即使它们都清楚地从服务器上回来了。当服务器发送3个名称时,只有前2个在建议中。当它发送4个名字时,会出现1个建议。一般模式是:

[(1 -> 1), (2 -> 2), (3 -> 2), (4 -> 1), (5 -> 0), (6 -> 5), (7 -> 5)… ]

一对中的第一个数字代表收到的作者数量,第二个数字代表建议数量。到底发生了什么事呢?!

提前致谢!

0 个答案:

没有答案