Подтвердить что ты не робот

Ненавязчивое автозаполнение jQuery в Rails

Я использую рельсы, но все мои Javascript ненавязчиво используют jQuery в application.js.

К сожалению, это довольно сложно для ссылки на URL-адреса. Например, если я хочу дать поведение автозаполнения поля, мне нужно жестко закодировать URL автозаполнения в application.js, так как рельсы url_for недоступны.

Можно ли использовать application.js erb? Думаю ли я об этом неправильно?

4b9b3361

Ответ 1

Вы можете добавить url к атрибуту в поле формы или формы, если вы не возражаете против разметки, которая может не пройти валидатор, а затем извлечь этот атрибут с помощью jQuery.

Похоже, что Rails 3.0 может спуститься по этому маршруту с помощью помощников javascript, используя атрибуты пользовательских данных HTML5: DHH @Railsconf 09

Ответ 2

Да, возможно, на текущих версиях рельсов просто вызовите ваш файл application.js.erb; в старых версиях вы можете либо свернуть свой собственный, либо захватить что-то вроде this.

Ответ 3

Не выполняйте application.js.erb, что не является хорошей практикой, даже если задействовано кэширование. Сделайте конечную точку автозаполнения (URL-адрес, с которой вы получаете данные) так же, как ваш URL-адрес действия формы. В application.js просто добавьте &ac=1 к нему и сделайте, чтобы ваши контроллеры поняли его.

Ответ 4

Вам не нужно жестко кодировать его - просто создайте одну JS-функцию, которая добавит слушатель автозаполнения, и примет параметры для автозаполнения и вызовет эту функцию JS из вашего шаблона:

(код упрощен для ясности)

application.js:

function add_autocomplete(id, url) {
   $("#" + id).autocomplete(
      source: url  
   );
};

application_helper.rb:

def add_autocomplete(id, url)
  render :text => "<script> add_autocomplete('#{id}', '#{url}');</script>"
end

Шаблон ERb:

<input id="i_want_autocomplete" />
<%= add_autocomplete("i_want_autocomplete", items_js_path() %>