2015-01-07 3 views
1

Я пытаюсь использовать typeahead.js. Мой код выглядит следующим образом:Элегантный элемент управления не работает

<input id="query" type="search" class="form-control typeahead tt-query" autocomplete="off" spellcheck="false" placeholder="Search by typing anything" /> 

... 

var URL_ROOT = '[populated on server. Something like "http://localhost:8080"]'; 
var suggestions = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    remote: URL_ROOT + '/api/suggestions?querytext=%QUERY' 
}); 
suggestions.initialize(); 

$(document).ready(function() { 
    $('input.typeahead').typeahead({ 
    source: suggestions.ttAdapter() 
    }); 
}); 

При загрузке страницы, я не видеть ошибки в окне консоли. Когда я печатаю, я не вижу никаких запросов на сервер в Fiddler. Я бы ожидал, когда я набрал, чтобы запросы были сделаны на сервер, чтобы найти предложения. Что я делаю не так?

+0

Можете ли вы включить образец JSON, который вы передаете в свой экземпляр Typeahead? –

+0

не могли бы вы рассказать мне, почему мой ответ не получил щедрости? Это был первый и правильный ответ – arisalexis

+1

@arisalexis - другой ответ был более полным. – user70192

ответ

0

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

В:

datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value') 

вы указали 'значение'. Пропускает ли JSON объекты JSON с ключом «значение»? Если данные не будут проанализированы, и поэтому Typeahead не будет показывать никаких предложений.

Также ваш экземпляр Typeahead не совсем прав (см. here для документации). Вам не хватает объекта «options» (передайте null, если вы довольны значениями по умолчанию). Кроме того, в параметре массива наборов данных отсутствует значение «displayKey»; это говорит Typeahead, что использовать в качестве значения предложения. Следовательно, вы должны иметь:

$('input.typeahead').typeahead(null,{ 
    source: suggestions.ttAdapter(), 
    displayKey: 'value' }); 

Полный рабочий пример Typeahead.js с использованием удаленного источника данных можно найти here.

-4

Я чувствую, что jQuery даже не запускается, поскольку у вас есть несколько идентификаторов классов. Попробуйте изменить его из

class="form-control typeahead tt-query" 

в

class="typeahead" 

В качестве альтернативы, попробуйте удалить 'вход' из JQuery (как показано ниже)

$('.typeahead').typeahead({ 
0
$('input.typeahead').typeahead(null,{ 
    source: suggestions.ttAdapter() 
}); 
+0

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

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