2011-04-04 1 views
1

Я наблюдал Railscasts о Ненавязчивый JavaScript и читать многочисленные учебные пособия, но две вещи Ненавязчивый JavaScript в Rails3 еще меня смущает:Использование простых JavaScript и мимолетные аргументы с Rails3 и UJS

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

Позвольте мне прояснить это с примерами кода. Я хочу, чтобы сделать ссылку, которая затухает некоторый элемент с идентификатором «образец»:

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. URL-адрес в link_to. Это был бы хэш URL для любого ресурса в приложении. Предположим, что вы указали resources :foos в route.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"}. Также вы можете передавать строки, например, foos/new, foos/1 и т. Д.

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

+0

Благодарим за ответ. Что касается первого ответа, я могу понять URL-адрес, но я не знаю, какой URL-адрес должен быть, когда я хочу указать не какой-то ресурс, а javascript. Должно ли быть какое-то новое действие в контроллере, названном, например, «показом», в каком случае файл javascript должен находиться в show.js.erb? В этом примере мне не нужно получать некоторые ресурсы, я просто хочу выполнить простой код javascript. – h00s

+0

Вы можете раскомментировать последнюю строку в файле 'routes.rb'' match ': controller (/: action (/: id (.: Format))). После этого вы можете просто определить любой метод в контроллере, который может использовать его в link_to. Как вы сказали, функция 'something', вы можете передать ее с помощью hash' {: controller =>: some_controller,: action =>: something} '. –

+0

Я бы посоветовал, если у вас в вашем приложении много js-обработки, вы должны определить для него одну функцию и передать ей параметры. например я бы определил действие js_handler в контроллере. теперь я дал hash '{: controller =>: my_controller,: action => js_handler,: what_to_do => 'task1'}', и в вашем методе вы можете использовать эти параметры для выполнения разных действий. –