Bloodhound:Twitter Typeahead不会显示从remote/ajax获取的所有结果



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

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

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

例如,我可能会键入"and",并从服务器接收 10 个用户的列表,名称为"桑迪博客"、"安德鲁博客"、"约翰桑德森"等,它将列出所有 10 个用户。 正确的 3 个字母也会突出显示。

但是,对于其他搜索,"ros","dan"等,它可能会拉回10个用户,但只能呈现两三个。

我怀疑问题出在我的猎犬基准标记器上,但真的不知道该怎么做。 这是我的寻血猎犬设置。

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 +年以来没有收到任何更新(结帐github)。但是有一个积极维护的分叉。(截至2018年)

  • 使用Identify():似乎您在设置寻血猎犬时没有设置identify()选项。根据官方文档,建议使用它,以便您的基准面始终是唯一的。

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

参考: 要塞@Digital提前输入教程

你的代码完全没问题,没有问题。寻血猎犬对寻血猎犬建议的限制设置有问题。您可以在此处查看问题详细信息。

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

但是现在的快速解决方案是将限制设置为20,它工作得很好。希望开发人员尽快解决此问题。在那之前,这是你最好的选择。

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

最新更新