typeahead.js дедупликация между предварительной выборкой и удаленными источниками данных
Я использую typeahead.js как с предварительной загрузкой, так и с удаленным http://twitter.github.io/typeahead.js/examples/
$(document).ready(function() {
var castDirectors = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: '../api/v1/search/people_typeahead',
remote: '../api/v1/search/people_typeahead?q=%QUERY'
});
castDirectors.initialize();
$('#remote .typeahead').typeahead(null, {
name: 'cast-directors',
displayKey: 'value',
source: castDirectors.ttAdapter(),
templates: {
empty: [
'<div class="empty-message">',
'no matching names',
'</div>'
].join('\n'),
suggestion: Handlebars.compile('<p><a href="{{link}}">{{value}}</a></p>')
}
});
});
Однако в предварительной выборке JSON и удаленной JSON есть дублированные записи. Как я могу сделать дедупликацию, чтобы она показала только одну запись?
1 ответ
Решение
Добавьте параметр dupDector в код инициализации Bloodhound, т.е. поместите следующий код после "remote:":
dupDetector: function(remoteMatch, localMatch) {
return remoteMatch.value === localMatch.value;
}
Вы не включили свой JSON, поэтому я не могу быть уверен, что сравнение в приведенном выше коде является правильным. Этот код будет игнорировать повторяющиеся значения в локальных и удаленных источниках данных.