我在一个非常简单的设置中使用Twitter Typeahead。它对服务器进行远程调用,以获取名称和标识符列表作为json数组,如下所示:
[{"value":"Declan Strosin","data":"b2c9d118-2e7a-4516-bc50-5505cbfcc834"},{"value":"Jany Legros","data":"d8b53d8c-d952-4fed-bc22-5932094abca1"}]
问题在于,有时候Typeahead会呈现所有匹配的选项,但有时候它会只显示几个。对它决定渲染的内容似乎没有任何押韵或理由。
例如,我可以键入"和",并从服务器接收一个名单为" 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没有呈现任何内容。
答案 0 :(得分:1)
您的代码似乎没有问题。您可以尝试以下方法:
使用更新/维护的版本:原来的Typeahead已经 NOT 收到了3年以上的任何更新(结帐github)。但是有一个积极维护的fork。 (截至2018年)
使用识别():设置Bloodhound时似乎没有设置identify()
选项。根据{{3}},建议使用它,以便您的基准始终是唯一的。
最后,交叉检查:使用参考中的教程,以确保您没有遗漏任何内容。
参考: 的 official documentation 强>
答案 1 :(得分:0)
你的代码完全正常,没有问题。 Bloodhound有关于猎犬建议限制设置的问题。您可以查看问题详情here。
目前我无法说出造成这个问题的原因,因为尝试不同的结果列表组合,对我来说没有任何意义。
但是现在快速解决方案是将限制设置为20 ,并且它可以正常工作。希望开发人员尽快解决这个问题。直到那时这是你最好的选择。
return new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 20,
remote: {
url: url + '?term=%QUERY',
wildcard: '%QUERY'
}
});