Jquery 如何为typeahead数据集中的每个datumtokenizer设置唯一的minLength

Jquery 如何为typeahead数据集中的每个datumtokenizer设置唯一的minLength,jquery,typeahead.js,bloodhound,Jquery,Typeahead.js,Bloodhound,背景: var games = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: 'https://api.myjson.com/bins/ss93y' ); $('.basic .typeahead').typeahead({ hin

背景:

var games = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  prefetch: 'https://api.myjson.com/bins/ss93y'
);

$('.basic .typeahead').typeahead({
  hint: false,
  highlight: true,
  minLength: 1,
  limit: 5,
}, {
  name: 'games',
  display: 'title',
  source: games,
  templates: {
    header: '<h3 class="games-header">Games</h3>'
  }
});
我正在使用typeahead.js向用户提供搜索建议。我希望用户能够看到基于我的数据集的“标题”和“差异”的建议。我遇到的问题是,当title和diff字段重叠时,可能会导致一些混乱的结果

在这幅图中,您可以看到活动查询是“Ea”,并且字体显示了标题“Earthbound”和差异“Easy”的建议。我不喜欢这个结果,而是希望一个少于3个字符的查询只从“title”字段中提取

问题:

var games = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  prefetch: 'https://api.myjson.com/bins/ss93y'
);

$('.basic .typeahead').typeahead({
  hint: false,
  highlight: true,
  minLength: 1,
  limit: 5,
}, {
  name: 'games',
  display: 'title',
  source: games,
  templates: {
    header: '<h3 class="games-header">Games</h3>'
  }
});
如何为数据集中的每个datumtokenizer设置唯一的minLength?因此,建议从标题中提取,从第一个字符开始,直到查询至少有3个字符,建议才从“diff”开始提取

代码:

var games = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  prefetch: 'https://api.myjson.com/bins/ss93y'
);

$('.basic .typeahead').typeahead({
  hint: false,
  highlight: true,
  minLength: 1,
  limit: 5,
}, {
  name: 'games',
  display: 'title',
  source: games,
  templates: {
    header: '<h3 class="games-header">Games</h3>'
  }
});
var games=新猎犬({
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('title','diff'),
queryTokenizer:猎犬,标记,空白,
预取:'https://api.myjson.com/bins/ss93y'
);
$('.basic.typeahead')。typeahead({
提示:错,
推荐理由:没错,
最小长度:1,
限额:5,
}, {
名称:'游戏',
显示:“标题”,
资料来源:游戏,
模板:{
标题:“比赛”
}
});
JS小提琴:

考虑到您需要的定制级别,我建议您实现自己的数据获取和子字符串匹配器功能,而不是使用侦探犬。我的解决方案基于

fetch('https://api.myjson.com/bins/ss93y)。然后(结果=>{
返回result.json();
}).然后(游戏=>{
var substringMatcher=(查询,cb)=>{
var normalizedQuery=query.toLowerCase();
if(normalizedQuery.length<3){
/*如果查询长度小于3个字符,则仅对标题进行筛选*/
返回cb(games.filter(game=>game.title.toLowerCase().includes(normalizedQuery));
}否则{
/*如果查询至少3个字符,请根据标题或差异进行筛选*/
返回cb(games.filter(game=>game.title.toLowerCase().includes(normalizedQuery)| | game.diff.toLowerCase().includes(normalizedQuery));
}
}
$('.basic.typeahead')。typeahead({
提示:错,
推荐理由:没错,
最小长度:1,
限额:50,
}, {
名称:'游戏',
显示:“标题”,
来源:substringMatcher,
模板:{
标题:“比赛”
}
});
});