2015-07-01 2 views
0

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

Мне нужно выполнить поиск по персонеName, но заполнить 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 но он загружается пустой выпадающий список, поэтому он должен «знать» о результатах.

Спасибо!

ответ

0

Я полагаю, вы можете отфильтровать результаты в ищейка как этот

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" 
} 

машинописный может быть изменен, как этот

$('#bloodhound .typeahead').typeahead(null, { 
    name: 'names', 
    displayKey: 'name', 
    source: names 
}); 
Смежные вопросы