使用简单的javascript并使用Rails3和UJS传递参数

时间:2011-04-04 08:34:36

标签: ruby-on-rails-3 ujs

我观看了关于不引人注目的javascript的railscast并阅读了大量的教程,但是关于Rails3中不显眼的javascript的两件事仍然让我困惑:

  1. 简单javascript的终点(隐藏一些元素,添加CSS类,......)
  2. 将参数传递给JS
  3. 让我用示例代码澄清一下。我想创建一个链接,淡出一些带有“sample”的元素:

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

    什么应该是url才能执行JS?它应该是名为'javascript'的控制器中的新动作,因此它可以在javascript.js.erb中访问JS,其中包含:

    $('#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 个答案:

答案 0 :(得分:1)

我会尽力逐一回答。

  1. link_to中的网址。它将是应用程序中任何资源的url哈希。假设您已在routes.rb中指定了resources :foos,它将为CRUD操作创建6个URL。您可以通过new_foo_urlfoo_url(@foo)foos_url等方法将这些内容传递给网址。即使您可以像{:controller=>:foos_controller, :action=>:index}一样手动传递哈希,也可以将多个参数传递给哈希,如{:controller=>:foos_controller, :action=>:index, :param1=>"value1", :param2=>"value2"}。您还可以传递foos/newfoos/1

  2. 等字符串网址
  3. 您可以非常轻松地使用jQuery访问自定义标记属性。例如,您想要使用id="link"访问锚点,您可以$('#link').attr("data-timeout")。如果你不知道id究竟是什么,但你知道它有一个属性,你可以致电$("a[data-timeout]").first().attr('data-timeout')