使用Typeahead.js预取显示总结果数

时间:2015-12-29 16:30:30

标签: javascript typeahead.js bloodhound

我正在使用Typeahead.js,其实现与"多个数据集非常相似"在examples中找到:

var nbaTeams = new Bloodhound({
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('team'),
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      prefetch: '../data/nba.json'
});

var nhlTeams = new Bloodhound({
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('team'),
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      prefetch: '../data/nhl.json'
});

var footer = function (context) {
    // calculate total hits here
    return "<a href='...'>" + count + "</a>";
}

$('#multiple-datasets .typeahead').typeahead(null, {    
      name: 'nba-teams',
      display: 'team',
      source: nbaTeams,
      templates: {
          header: '<h3 class="league-name">NBA Teams</h3>'
      },
      limit: 3
    },
    {
      name: 'nhl-teams',
      display: 'team',
      source: nhlTeams,
      templates: {
          header: '<h3 class="league-name">NHL Teams</h3>',
          footer: footer
      },
      limit: 3
});

我使用的是最新版本的Typeahead.js(v0.11.1)。我试图将一个页脚模板添加到NHL团队部分的底部,该部分具有匹配结果的总数。像<a href="...">Browse all ### results</a>这样的东西。我无法在文档中找到可以从Bloodhound中获取总点击次数的任何地方。

我已经看到人们使用远程数据源执行此操作,但我的数据源足够小,可以插入和缓存,因此我想使用预取。

1 个答案:

答案 0 :(得分:3)

我认为您的其他代码非常好,您只需要通过以下内容更新footer功能。

var footer = function (context) {
    // calculate total hits here
    return "<a href='#'>browse all <b>" + context.suggestions.length + "</b> results</a>";
}

看看this小提琴。