2015-12-29 8 views
5

Я использую Typeahead.js с реализацией, которая выглядит очень похоже на «нескольких наборов данных», найденных в examples:Показаны общие результаты подсчета с помощью предвыборку Typeahead.js в

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). Я пытаюсь добавить нижний колонтитул в нижней части раздела команд НХЛ, который имеет общее количество результатов сопоставления. Что-то вроде <a href="...">Browse all ### results</a>. Я не могу найти нигде в документации, где я могу вытащить кол-во всех хитов от Bloodhound.

Я видел, как люди делают это с удаленными источниками данных, но мой источник данных достаточно мал, чтобы его можно было вставлять и кэшировать, поэтому я бы хотел использовать предварительную выборку.

ответ

2

Я думаю, что ваш другой код в порядке, вам просто нужно обновить функцию footer следующим образом.

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

Посмотрите на this скрипка.

+0

Когда я набираю «a», он говорит «все 1 результат», но на экране отображаются 3. Кроме того, есть, вероятно, ~ 20 результатов, у которых есть a в них ... Я хочу 20. –

+0

Для вашего первого запроса он говорит «видеть все 1 результат», потому что ваш шаблон нижнего колонтитула предназначен для вашего второго набора данных, а другие два результата из 1-го набора данных. Для вашего второго запроса это [ошибка] (https://github.com/twitter/typeahead.js/issues/96), плагины-матчи только начинаются с tokes. Если вы хотите соответствовать любому персонажу, вы можете найти решение [здесь] (http://stackoverflow.com/questions/22059933/twitter-typeahead-js-how-to-return-all-matched-elements-within-a -string) –

+0

Я хочу сопоставить любой символ на обоих наборах данных, а не только тот, к которому прикреплен нижний колонтитул. –