Как управлять массивом хэшей с помощью typeahead.js

Я могу использовать неправильные инструменты для этого, поэтому, пожалуйста, порекомендуйте другие подходы, если они подходят. Я совершенно уверен, что моя проблема заключается в моем методе ввода, а не в методе ищейки.

Мне нужно выполнить поиск по имени человека, но заполнить personId для отправки формы. У меня есть рабочий метод контроллера, который передает результаты в виде массива хэшей с идентификатором и именем. Примерный результат выглядит следующим образом:

[{"1":"Nominee Employee"},{"2":"User Employee"}]

Я не могу найти документы, отвечающие моей потребности. Я знаю, что код ищейки вызывает мой метод контроллера, потому что журналы показывают выполнение запроса. Я просто не вижу ничего, что бы говорило «вот как можно получить определенный атрибут из записи для отображения».

var names = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: '/employee/lastNameOptions?term=%QUERY',
        wildcard: '%QUERY'
    }
});

 $('#bloodhound .typeahead').typeahead(null, {
     name: 'names',
     display: 'name',
     source: names
 });

Я ожидаю, что текущая реализация по крайней мере попытается напечатать 1: Joe Schmo, но загружает пустой раскрывающийся список, поэтому он должен «осведомляться» о результатах.

Спасибо!


person Joe Essey    schedule 01.07.2015    source источник


Ответы (1)


Я считаю, что вы можете отфильтровать результаты в Bloodhound следующим образом.

remote: {
  url: '/employee/lastNameOptions?term=%QUERY',
  wildcard: '%QUERY',
  filter: $.map(data, function(v, i){ 
    var o = Object.keys(v); 
    return { id: o[0], name: v[o[0]] }; 
  });
}

Это отформатирует данные в объект, подобный этому

{
  "id": "1",
  "name": "Nominee Employee"
}

typeahead можно изменить следующим образом

$('#bloodhound .typeahead').typeahead(null, {
     name: 'names',
     displayKey: 'name',
     source: names
 });
person Dhiraj    schedule 14.07.2015