Ненавязчивое автозаполнение jQuery в Rails
Я использую рельсы, но все мои Javascript ненавязчиво используют jQuery в application.js
.
К сожалению, это довольно сложно для ссылки на URL-адреса. Например, если я хочу дать поведение автозаполнения поля, мне нужно жестко закодировать URL автозаполнения в application.js
, так как рельсы url_for
недоступны.
Можно ли использовать application.js
erb? Думаю ли я об этом неправильно?
Ответы
Ответ 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() %>