javascript - Bloodhound:Twitter Typeahead 没有显示从远程/ajax 获取的所有结果

标签 javascript tokenize typeahead.js twitter-typeahead bloodhound

我在一个非常简单的设置中使用 Twitter Typeahead。它对服务器进行远程调用以获取名称和标识符列表作为 json 数组,如下所示:

[{"value":"Declan Strosin","data":"b2c9d118-2e7a-4516-bc50-5505cbfcc834"},{"value":"Jany Legros","data":"d8b53d8c-d952-4fed-bc22-5932094abca1"}]

问题是有时 Typeahead 会呈现所有匹配的选项,但有时它只会显示几个。它决定呈现的内容似乎没有任何韵律或理由。

例如,我可能会输入“and”,然后从服务器接收到一个包含 10 个用户的列表,这些用户的名字如“Sandy Blogs”、“Andrew Blogs”、“John Sanderson”等,它会列出所有 10 个用户.正确的 3 个字母也突出显示。

然而,对于其他搜索,“ros”、“dan”等,它可能会拉回 10 个用户,但只会呈现两三个。

我怀疑问题出在我的 Bloodhound 数据分词器上,但我真的不知道该怎么办。这是我的 Bloodhound 设置。

    return new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
            url: url + '?term=%QUERY',
            wildcard: '%QUERY'
        }
    });

我读过这篇文章,https://github.com/twitter/typeahead.js/blob/master/doc/migration/0.10.0.md#tokenization-methods-must-be-provided , 但我仍然一无所知。

编辑:我现在遇到过从服务器拉回 10 个或更多条目,但 Typeahead 没有呈现任何内容的情况。

最佳答案

您的代码似乎没有问题。您可以尝试以下操作:

  • 使用更新/维护的版本:原来的 Typeahead 自 3 年多以来没有收到任何更新( checkout github )。但是有一个积极维护的 fork . (截至 2018 年)

  • 使用Identify():您在设置Bloodhound 时似乎没有设置identify() 选项。根据official documentation ,建议使用它,以便您的数据始终是唯一的。

  • 最后,交叉检查:引用引用中的教程以确保您没有遗漏任何内容。

引用: <强> Typeahead Tutorial @Digital Fortress

关于javascript - Bloodhound:Twitter Typeahead 没有显示从远程/ajax 获取的所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48617899/

相关文章:

javascript - 如何使 float div成为每行最高元素的高度

python - 处理带有前导零的标记

parsing - 你有没有在现实世界的应用程序中有效地使用过词法分析器/解析器?

jquery - Typeahead.js - 显示有更多结果

javascript - Twitter 预输入隐藏字段

javascript - 文件系统 API - 从目录拖放中递归列出文件

javascript - AngularJS 在 ng-* 语句中使用变量

javascript - Phaser.text 上下无 Angular

c - C语言读取文件

javascript - 带有可点击链接的 Typeahead.js