Плагин auto_complete Rails 3.1 выдает странную ошибку

Я использую плагин auto_complete:

https://github.com/crowdint/rails3-jquery-autocomplete

Я установил драгоценный камень и добавил требуемую строку в свой файл манифеста в соответствии с инструкциями:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require autocomplete-rails
//= require prototype
//= require prototype_ujs

Сделав это, firebug выдает мне это сообщение об ошибке:

$("input[data-autocomplete]") is null

и ошибка прослеживается до этой строки в autocomplete-rails.js:

$(document).ready(function(){$("input[data-autocomplete]").railsAutocomplete()})...

Я использую:

Rails 3.1.0
Ruby 1.9.2

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

Любая помощь будет оценена по достоинству!


person hade    schedule 07.10.2011    source источник
comment
На всякий случай, вы пробовали перезапускать сервер?   -  person bricker    schedule 07.10.2011
comment
Я не знаю, связано ли это с моей потребностью в библиотеках прототипов.   -  person hade    schedule 07.10.2011
comment
См. использование JQuery и Prototype на одной странице, почему это может быть проблемой.   -  person mliebelt    schedule 07.10.2011
comment
Спасибо за подсказку, но тут нечем помочь. Я еще не нашел решения для запуска этого плагина с включенным прототипом.   -  person hade    schedule 10.10.2011
comment
Единственное решение, которое я нашел для этого, - это не использовать библиотеку Prototype одновременно. Я добавил операторы noConflict, но они не помогают. Теперь я изменил свой код, связанный с прототипом, на vanilla JS или Jquery. Хм... не очень хорошее решение, но в конце концов мне нужно было внести это изменение. Это был хороший триггер для этого.   -  person hade    schedule 27.10.2011


Ответы (2)


autocomplete-rails.js будет искать элемент с атрибутом data-autocomplete после того, как документ будет готов.

Поскольку вы не добавили поле автозаполнения на страницу просмотра, оно показывает null.
Вы можете добавить автозаполнение поля двумя способами.

1. Использование form_for

form_for @product do |f|
  f.autocomplete_field :brand_name, autocomplete_brand_name_products_path
end  

Это сгенерирует html

<input type="text" data-autocomplete="products/autocomplete_brand_name">

2. Использование form_tag

form_tag 'some/path'
  autocomplete_field_tag 'address', '', address_autocomplete_path, :size => 75
end

Вы ничего не сделали неправильно. Вы находитесь в середине разработки. Эта проблема будет решена, когда вы добавите автозаполнение на свою страницу просмотра, как описано в драгоценном камне.

ваше здоровье :)

person Soundar Rathinasamy    schedule 07.10.2011
comment
Спасибо за ответ, но тут нечем помочь. Я также пытался добавить что-то в контроллер и представление, но не помогло. Серьезно, этот драгоценный камень так работает? Это выдаст мне ошибку Javascript, если на моей странице нет определенного именованного элемента ввода? Уверены ли вы? Я бы подумал, что любой драгоценный камень не должен намеренно вызывать сбой моего сайта, если он не используется. - person hade; 07.10.2011
comment
Вы правы. Недавно я реализовал этот драгоценный камень в своем приложении. Но у меня есть только библиотека jQuery. Я только что добавил прототип в свое приложение и получил точную ошибку, которую вы упомянули здесь. Так что это из-за конфликта между jQuery и библиотекой прототипов. .Удалить прототип и проверить. - person Soundar Rathinasamy; 07.10.2011
comment
Спасибо, что попробовали это. Я не могу напрямую удалить прототип, потому что многие классы реализованы по-прототипному, но я создам новый проект и попытаюсь найти обходной путь. Позвольте мне вернуться к вам, спасибо! - person hade; 07.10.2011
comment
Я очень ценю время, которое вы потратили, чтобы проверить это. Кажется, что комбинация Prototype - jquery здесь все портит. У меня всегда был noConflict, и теперь я пытаюсь загружать библиотеки в другом порядке. К сожалению, я не могу принять ваш ответ, потому что для этого потребуется полностью удалить Prototype. Спасибо! - person hade; 11.10.2011

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

person hade    schedule 27.10.2011