Сопоставление подстрок для объекта с несколькими свойствами в заголовке типа Twitter

#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; });