2009-04-07 3 views
13

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

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

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

ответ

6

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

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

2

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

+0

Круто! Это лучшая практика здесь? Вы используете этот метод? Это звучит хорошо для меня, но я все еще нервничаю, я работаю против зерна. –

+1

AFAIK, он превратился в рельсы, потому что так много людей делали это самостоятельно. Это очень распространенный шаблон использования. Одно предостережение: это для инъекций полустатических вещей, таких как маршруты; если содержимое будет изменено в течение сеанса, отправьте javascript в оболочку ajax. – MarkusQ

+0

На самом деле это не работает - мне нужно переместить файл из/public/javascripts? Если я просто переименую файл, я получаю ошибку маршрутизации, когда мой браузер запрашивает «application.js». –

2

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

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^