Используя простой JavaScript и передавая аргументы с Rails3 и UJS - PullRequest
1 голос
/ 04 апреля 2011

Я наблюдал Railscasts о ненавязчивом javascript и читал многочисленные учебные пособия, но две вещи о ненавязчивом javascript в Rails3 все еще смущают меня:

  1. Конечная точка для простого javascript (скрытие некоторых элементов, добавление CSS-класса, ...)
  2. Передача аргументов в JS

Позвольте мне пояснить это с помощью примера кода.Я хочу сделать ссылку, которая затухает некоторый элемент с идентификатором "sample":

link_to 'Fade sample', url, :remote => true

Каким должен быть URL, чтобы он мог выполнять JS?Если это будет новое действие в контроллере с именем, например, 'javascript', чтобы он мог получить доступ к JS в javascript.js.erb, который содержит:

$('#sample').fadeOut();

Кроме того, второй вопрос о ujs связан с передачей аргументов в JS (тайм-аут, для этого примера).Я могу написать:

link_to 'Fade sample', url, :data-timeout => 1500, :remote => true

, но не знаю, как получить доступ к тайм-ауту данных в javascript.

Я использую Rails 3.0.5, JQuery 1.5.2 и jquery-ujs.

1 Ответ

1 голос
/ 04 апреля 2011

Я бы попробовал ответить один на один.

  1. URL в link_to. Это был бы хеш URL для любого ресурса в приложении. Предположим, вы указали resources :foos в routs.rb, он создаст 6 URL для операции CRUD. Вы можете передать их URL-адресам такими способами, как new_foo_url, foo_url(@foo) или foos_url. Даже вы можете передать хеш вручную, например {:controller=>:foos_controller, :action=>:index}, также вы можете передать несколько параметров хешу, например {:controller=>:foos_controller, :action=>:index, :param1=>"value1", :param2=>"value2"}. Также вы можете передавать строки URL, такие как foos/new, foos/1 и т. Д.

  2. Вы можете легко получить доступ к пользовательским атрибутам тега с помощью jQuery. например, вы хотите получить доступ к привязке с помощью id="link", вы можете $('#link').attr("data-timeout"). Если вы не знаете, что это за идентификатор, но знаете, что у него есть атрибут, вы можете позвонить $("a[data-timeout]").first().attr('data-timeout')

...