Ответ 1
Я нашел решение... проблема в том, что я так привык к bootstrap2 typeahead, что я не понимал вещь datumTokenizer
. Если кому-то еще трудно понять, я опишу небольшое описание ниже:
queryTokenizer: массив запросов, которые вы запрашиваете, если вы запрашиваете 'test abcd', он преобразует строку в ['test', 'abcd'] и ищет совпадения с этими двумя словами.
datumTokenizer: массив слов, который будет сопоставлен с queryTokenizer. Каждый элемент из вашего JSON будет иметь набор слов для соответствия.
Итак, если у вас есть источник:
['good test', 'bad test']
и запрос для "est". Вам нужно сделать datumTokenizer вернуть массив, содержащий "est", что-то вроде:
['good', 'test', 'ood', 'od', 'test', 'est', 'st'] для первого элемента
['bad', 'ad', 'test', 'est', 'st'] для второго элемента
Bellow - это код, который я написал, я не знаю, насколько это оптимально для него, но я думаю, что это все равно поможет:
new Bloodhound({
datumTokenizer: function(d) {
var test = Bloodhound.tokenizers.whitespace(d.value);
$.each(test,function(k,v){
i = 0;
while( (i+1) < v.length ){
test.push(v.substr(i,v.length));
i++;
}
})
return test;
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: '/lista.json',
ttl: 10000
}
});