Typeahead/Bloodhound只返回第一个搜索结果,而不返回新的搜索结果



我已经用Bloodhound实现了Typeahead来获取远程JSON数据,它很有效,但当我删除输入中的内容并键入其他内容时,会出现相同的结果。我在chrome dev工具中检查了网络,只有一个请求,即使我删除并重新开始键入,也没有新的请求。我该如何解决?keyup上应该有一个新的请求吗?

var articles = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '../fetch-article',
wildcard: '%QUERY'
}
});

$('#search-article .typeahead').typeahead(null, {
name: 'articles',
display: 'value',
highlight: true,
limit: Infinity,
minLength: 3,
source: articles,
templates: {
empty: [
'<div class="empty-message">',
'Article not found',
'</div>'
].join('n'),
suggestion: function(data) {
return '<div class="tt-suggest-page">' + data.title + '<br><a href="../copyright/' + data.slug + '">Read More</a></div>';
}
}
});

Bloodhound将第一次命中的结果缓存到远程。然后,它尝试只在缓存的数据中搜索您在文本字段中键入的第二个查询,因此不会再次访问远程。你可以告诉猎犬不要使用缓存进行搜索。这可以使用以下配置完成:

var articles = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '../fetch-article',
wildcard: '%QUERY',
cache: false        //set cache to false
}
});

参考编号:https://github.com/twitter/typeahead.js/issues/1525

Bloodhound Typeahead默认缓存远程调用,我们必须将缓存配置为false才能再次调用远程URL。

cache–如果为false,则不会尝试读取或写入本地存储,并且在初始化时始终从url加载预取数据。默认为true。

您可以在此处查看文档-https://github.com/twitter/typeahead.js/blob/master/doc/bloodhound.md#prefetch

最新更新