Typeahead.js с удаленным источником данных

У меня есть файл json, который выводит

{"data": ["A", "B", "C", "D", ...]}

Мой скрипт typeahead.js выглядит так

var engine = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        url: 'list.json',
        filter: function(list) {
            return $.map(list, function(person) { return { name: person }; });
        }
    }
});

engine.initialize();

$('.typeahead').typeahead(null, {
    displayKey: 'name',
    source: engine.ttAdapter()
});

Скрипт typeahead.js активируется правильно, но интерпретирует источник данных как один элемент, разделенный запятыми, а не как отдельные элементы. Поэтому вместо «поиска» по элементам «A», «B», «C» и т. д. он просто дает мне одно предложение «A, B, C, ...".

Что не так с моим скриптом? Я следовал примерам на странице http://twitter.github.io/typeahead.js/examples/. .

Если я изменю «имя» на «значение» как в datumTokenizer, filter, так и в displayKey, он вообще не получит никаких элементов, а выведет только «неопределенное». Я почти уверен, что это параметр фильтра внутри предварительной выборки, который работает неправильно.


person Jamgreen    schedule 23.08.2014    source источник
comment
Этот ответ, который дает удаленный пример, может вам помочь.   -  person Ben Smith    schedule 26.08.2014


Ответы (1)


В функции фильтра вы перебираете свойства объекта:

{"data": ["A", "B", "C", "D", ...]}

в этом случае вы перебираете только «данные». Для перебора элементов в «данных» вы должны передать list.data функции фильтра. Таким образом:

var engine = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        url: 'list.json',
        filter: function(list) {
            return $.map(list.data, function(person) { return { name: person }; });
        }
    }
});
person jloria    schedule 13.11.2014