我能够毫无问题地使用旧版本的Twitter Typeahead,我对新版本的了解肯定是有限的,我肯定对为什么会出现重复条目感到困惑。
这是我的Javascript:
// Sources
var sources = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: '/sources/prefetch/',
remote: '/sources/prefetch/'
});
sources.initialize();
$('#a_sources_list').typeahead(null, {
name: 'sources',
displayKey: 'name',
source: sources.ttAdapter()
})
/ sources / prefetch / 返回:
[{"id":"1","name":"Google"},{"id":"3","name":"Yahoo"}]
以下是正在发生的事情的屏幕截图:
答案 0 :(得分:5)
问题在于prefetch
和remote
来自同一来源。
这里详述的问题:
https://github.com/twitter/typeahead.js/issues/614
基本上, BloodHound 有默认限制。如果建议数量低于该限制,则会调用远程URL。
可以选择创建重复检测器:
https://github.com/twitter/typeahead.js/blob/master/doc/bloodhound.md#options
您可以使用它来确保相同的项目不会出现两次。
这是dupDetector的一个例子:
https://github.com/twitter/typeahead.js/issues/606#issuecomment-34667422
dupDetector: function(remoteMatch, localMatch) {
return remoteMatch.id === localMatch.id;
}