2015-11-24 2 views
3

Я просто занимаюсь некоторыми исследованиями в Typeahead.js, и это действительно крутая библиотека. Мне удалось получить базовый пример работы с благодарностью к документации, которая тоже очень хороша.Объяснение функции substrahead.js substringMatcher

Однако я пытаюсь понять, что делает следующий блок кода?

var substringMatcher = function(strs) { 
    return function findMatches(q, cb) { 
    var matches, substringRegex; 

    // an array that will be populated with substring matches 
    matches = []; 

    // regex used to determine if a string contains the substring `q` 
    substrRegex = new RegExp(q, 'i'); 

    // iterate through the pool of strings and for any string that 
    // contains the substring `q`, add it to the `matches` array 
    $.each(strs, function(i, str) { 
     if (substrRegex.test(str)) { 
     matches.push(str); 
     } 
    }); 

    cb(matches); 
    }; 
}; 

В примере она передается в при инициализации машинописного в качестве опции source. Я могу понять, что он принимает входные данные из текстового поля и сравнивает его с набором данных, но я немного смущен относительно того, что такое q и cb?

ответ

4

q - значение, которое нужно искать. Это передается в соответствие регулярному выражению, а поиск - case-insensitivie («i» param)

- это функция обратного вызова, которая возвращает совпадения, найденные при поиске.

findMatches - это анонимная функция, которая используется как реализация функции substringMatcher.

+0

Хорошо, это имеет смысл, есть ли причина, почему автор пошел с анонимной функцией в этом случае? – Javacadabra

+0

Похоже, это похоже на форму currying, где strs - список строк, удерживаемых в закрытии. В принципе, удобный способ фильтрации strs по q –

+0

Хорошо оцените вашу помощь в этом, делает вещи намного яснее! Я ненавижу не понимать, что делает каждая строка. – Javacadabra

Смежные вопросы