2014-12-10 3 views
1

입력 된 입력 값을 선택하려고 시도 할 때마다이 오류가 발생합니다 : Uncaught TypeError: Cannot assign to read only property 'highlight' of. 그것은 어떤 객체를 가리키는 지 알려주지 않으며 TypeAhead.min.js 파일에서 발생하기 때문에 내 코드의 어떤 행이 그것을 발생시키고 있는지 정확히 말할 수 없습니다. 컨텍스트에 대한TypeAhead.js 하이라이트 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 함수가 methods 배열에 정의되어 있고 이미 초기화되었지만 setQuery는 그렇지 않다는 사실과 관련이있는 것으로 보입니다. setQuery의 초기화로 인해 오류가 발생합니다. val을 사용하는 것이 올바른 방법입니다. –