#javascript #typeahead.js
#javascript #typeahead.js
Вопрос:
Таким образом, данные выглядят следующим образом перед отправкой в средство сопоставления подстрок:
var datasource = [
{name: 'Activity One', id: '1'},
{name: 'Activity Two', id: '2'},
{name: 'Activity Three', id: '3'},
{name: 'Activity Four', id: '4'}
];
Когда это был обычный массив значений
var datasource = { 'Activity One', 'Activity Two',...
Было просто использовать twitter typeahead для правильного сопоставления, но теперь, когда существует несколько свойств, я не уверен в том, как должен работать механизм сопоставления подстрок.
Вот как инициализировать typeahead:
$(control)
.typeahead({
hint: true,
highlight: true,
minLength: 0
},
{
displayKey: "name",
name: "name",
source: substringMatcher(datasource)
});
Теперь строка соответствует правильно при первом нажатии, но ее больше не удается сопоставить с помощью средства сопоставления подстрок.
Вот средство сопоставления подстрок:
var substringMatcher = function (strs) {
return function findMatches(q, cb) {
var matches = [];
var substrRegex = new RegExp(q, 'i');
$.each(strs,
function (i, str) {
if (substrRegex.test(str)) {
matches.push(str);
}
});
cb(matches);
};};
Что мне нужно изменить? Я не знаю, как ссылаться на свойство *.name.
Ответ №1:
Bloodhound выполняет сопоставление подстрок. Что касается доступа к свойствам, используйте
var ds = datasource.map(function(o) { return o.name; });