2014-12-10 3 views
1

Я пытаюсь получить выбранное значение ввода типа head и каждый раз получаю эту ошибку: Uncaught TypeError: Cannot assign to read only property 'highlight' of. Он никогда не говорит мне, к какому объекту он относится, и он возникает из файла TypeAhead.min.js, поэтому я не могу точно сказать, какая строка моего кода вызывает его. Вот код, я использую, чтобы создать и захватить значение входа:TypeAhead.js Highlight TypeError

$(".articles.new").ready -> 
    engine = new Bloodhound { 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    local: autocomplete_items 
} 

engine.initialize() 

$('#auto_complete').typeahead { hint: true, highlight: true, minLength: 1 }, 
    { name: "names", displayKey: "name", source: engine.ttAdapter()} 

$('#auto_complete').on 'typeahead:selected', (event, selection) -> 
    alert selection.name 
    $('#auto_complete').typeahead 'setQuery', '' 
    event.stopPropagation() 
    return 
return 

Для контекста: auto_complete элементы представляет собой массив объектов из моего контроллера с именем свойства. Я работаю в Ruby on Rails 4.1.4.

Что можно сделать, чтобы исправить эту ошибку? Что вызывает это?

ответ

10

Я понял это после много экспериментирования. Ошибка исходила из этой строки $('#auto_complete').typeahead 'setQuery', ''. Я попытался очистить значение от поля ввода после принятия других действий с ним. Я не слишком уверен в технических деталях, но вместо этого $('#auto_complete').typeahead 'val', '' добился желаемого эффекта без ошибки. Полагаю, это объясняет, почему объект был пустым, он имел в виду пустой запрос и пытался с ним предпринять действия.

Если кто-нибудь может дать мне более подробное объяснение разницы между двумя вызовами API, мне было бы интересно услышать это из любопытства, но если нет, я просто счастлив двигаться дальше.

+0

Похоже, что это связано с тем, что функция val определена в массиве методов и уже инициализирована, но setQuery - нет. Инициализация setQuery вызывает ошибку. Так что просто похоже, что использование val - правильный способ сделать это. –

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