【问题标题】:Bloodhound: Twitter Typeahead is not showing all results fetched from remote/ajaxBloodhound:Twitter Typeahead 未显示从远程/ajax 获取的所有结果
【发布时间】:2018-07-15 00:48:13
【问题描述】:

我在一个非常简单的设置中使用 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 没有呈现任何内容。

【问题讨论】:

  • 您确定您的 ajax 请求运行良好吗?分享更多代码,您在上面发布的代码非常适合我。
  • 如果您提供初始化预输入的代码会很有用。
  • 一个 Json 示例会很有帮助,什么是显示的,什么不是
  • 你确定你写and的时候显示的是John Sanderson吗?我相信只有当您的查询与每个单词的开头匹配时,您的 Bloodhound 才会匹配。
  • Bloodhound 匹配通过远程发送的所有内容,即使结果中不存在查询。

标签: javascript tokenize typeahead.js twitter-typeahead bloodhound


【解决方案1】:

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

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

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

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

参考: Typeahead Tutorial @Digital Fortress

【讨论】:

    【解决方案2】:

    您的代码完全没问题,没有问题。 Bloodhound 在 Bloodhound 建议的限制设置方面存在问题。您可以查看问题详情here

    目前我不能说是什么导致了这个问题,因为尝试不同的结果列表组合,这对我来说没有任何意义。

    但目前快速的解决方案是将 limit 设置为 20,并且效果很好。希望开发者尽快解决这个问题。到那时,这是你最好的选择。

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

    【讨论】:

    • @kimPrince 需要更多信息,预输入版本、初始化代码、ajax url 等
    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多