Ненавязчивое автозаполнение jQuery в Rails - PullRequest
13 голосов
/ 07 апреля 2009

Я использую rails, но незаметно делаю весь свой Javascript, используя jQuery в application.js.

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

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

Ответы [ 4 ]

6 голосов
/ 16 мая 2009

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

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

2 голосов
/ 13 мая 2009

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

2 голосов
/ 07 апреля 2009

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

1 голос
/ 11 марта 2010

Вам не нужно жестко его кодировать - просто создайте одну функцию 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() %>
...