Typeahead 0.11.1 не добавляет результаты из JSON

Я пытаюсь заставить Typeahead добавить автозаполнение из моего источника JSON, но результаты не добавляются.

Некоторая справочная информация: у меня есть Sinatra, обслуживающая страницу JSON, которая принимает параметр запроса, вот код:

get '/search' do
    content_type :json
    Movie.search(params[:q], {
      fields: ["title^5"],
      limit: 10,
      load: false
    }).map(&:title).to_json
end

и это работает; вот например результат.

/search?q=toy%20story возвращает:

["Toy Story"]

Мой ввод HTML выглядит так:

<input id="search-box" type="text" value="" placeholder="Search for Movie Title" class="form-control" name="search">

и мой JS:

$(function() {
  $('#search-box').typeahead({
    highlight: true,
    limit: 10
  },
  {
    display: 'movie',
    source: function(query, syncResults, asyncResults) {
      $.get('/search?q=' + encodeURIComponent(query), function(data) {
        asyncResults(data);
        console.log(data);
      });
    }
  }
})

Результаты отображаются в console.log по мере того, как я печатаю, и добавляются объекты HTML Typeahead, но в них ничего нет, и они скрыты.

Кто-нибудь может помочь? Я застрял на этом весь день.


person f7n    schedule 13.01.2016    source источник


Ответы (1)


Я твердо верю, что именно display: 'movie' вызывает ваши проблемы. Если вы возвращаете массив строк, то есть ["Toy Story"], вы хотите показать value элементов массива:

display: 'value'

в противном случае, если вы работаете с массивом элементов JSON, например

[{ "title" : "2001: A Space Odyssey" } , { ... } ] 

тогда display (или displayKey) должно относиться к паре ключ/значение, которую вы хотите отобразить в раскрывающемся списке:

display: 'title'
person davidkonrad    schedule 17.02.2016