Ruby on rails 3 使用简单的javascript并通过Rails3和UJS传递参数
我已经看过railscasts关于不引人注目的javascript的内容,并阅读了大量教程,但Rails3中关于不引人注目的javascript的两件事仍然让我感到困惑:Ruby on rails 3 使用简单的javascript并通过Rails3和UJS传递参数,ruby-on-rails-3,ujs,Ruby On Rails 3,Ujs,我已经看过railscasts关于不引人注目的javascript的内容,并阅读了大量教程,但Rails3中关于不引人注目的javascript的两件事仍然让我感到困惑: 简单javascript的终点(隐藏一些元素,添加CSS类,…) 将参数传递给JS 让我用示例代码来说明这一点。我想制作一个链接,使id为“sample”的某个元素淡出: url应该是什么才能执行JS?它是否应该是控制器中名为“javascript”的新操作,以便它可以访问javascript.JS.erb中的JS,其中包含:
$('#sample').fadeOut();
另外,关于ujs的第二个问题与向JS传递参数有关(本例中为timeout)。我可以写:
link_to 'Fade sample', url, :data-timeout => 1500, :remote => true
但不知道如何在javascript中访问数据超时
我正在使用Rails 3.0.5、JQuery 1.5.2和JQuery ujs。我会尝试逐一回答
中的url。它将是应用程序中任何资源的url哈希。假设您在routes.rb中指定了resources:foos
,它将为CRUD操作创建6个URL。您可以通过new\u-foo\u-url
、foo\u-url(@foo)
或foos\u-url
等方法将它们传递到url。即使您可以手动传递散列,如{:controller=>:foos_controller,:action=>:index}
,也可以向散列传递多个参数,如{:controller=>:foos_controller,:action=>:index,:param1=>“value1”,:param2=>“value2”
。您还可以传递字符串URL,如foos/new
,foos/1
等
id=“link”
访问锚点,您可以$('#link').attr(“数据超时”)
。如果您不知道确切的id是什么,但知道它有一个属性,您可以调用$([data timeout])。first().attr('data-timeout')
我会一个接一个地回答
中的url。它将是应用程序中任何资源的url哈希。假设您在routes.rb中指定了resources:foos
,它将为CRUD操作创建6个URL。您可以通过new\u-foo\u-url
、foo\u-url(@foo)
或foos\u-url
等方法将它们传递到url。即使您可以手动传递散列,如{:controller=>:foos_controller,:action=>:index}
,也可以向散列传递多个参数,如{:controller=>:foos_controller,:action=>:index,:param1=>“value1”,:param2=>“value2”
。您还可以传递字符串URL,如foos/new
,foos/1
等
id=“link”
访问锚点,您可以$('#link').attr(“数据超时”)
。如果您不知道确切的id是什么,但知道它有一个属性,您可以调用$([data timeout])。first().attr('data-timeout')
谢谢你的回答。关于第一个答案,我可以理解url,但我不知道当我不想指定某些资源,而是javascript时应该是什么url。它应该是控制器中名为“showing”的一些新操作吗?在这种情况下,javascript文件应该位于showing.js.erb中?在本例中,我不需要获取一些资源,只需要执行简单的javascript代码。您可以取消注释
routes.rb
文件match':controller(/:action(/:id(:format))“
中的最后一行。之后,您可以在控制器中定义任何方法,并在链接中使用它。正如你所说的函数something
,你可以通过散列{:controller=>:some\u controller,:action=>:something}
传递它。我建议如果你的应用程序中有很多js处理,你必须为它定义一个函数,并向它传递参数。e、 我会在控制器中定义一个动作js_处理程序。现在我给出了hash{:controller=>:my_controller,:action=>js_handler,:what_to_do=>'task1'}
,在您的方法中,您可以使用这些参数执行不同的操作。谢谢您,Nazar。最后这句话对我很有帮助。这是一个选择,但我不知道这是否是解决我问题的“正确”方法。谢谢,谢谢你的回答。关于第一个答案,我可以理解url,但我不知道当我不想指定某些资源,而是javascript时应该是什么url。它应该是控制器中名为“showing”的一些新操作吗?在这种情况下,javascript文件应该位于showing.js.erb中?在本例中,我不需要获取一些资源,只需要执行简单的javascript代码。您可以取消注释routes.rb
文件match':controller(/:action(/:id(:format))“
中的最后一行。之后,您可以在控制器中定义任何方法,并在链接中使用它。正如你所说的函数something
,你可以通过散列{:controller=>:some\u controller,:action=>:something}
传递它。我建议如果你的应用程序中有很多js处理,你必须为它定义一个函数,并向它传递参数。e、 我会在控制器中定义一个动作js_处理程序。现在我给出了hash{:controller=>:my_controller,:action=>js_handler,:what_to_do=>'task1'}
,在您的方法中,您可以使用这些参数执行不同的操作。谢谢您,Nazar。最后这句话对我很有帮助。这是一个选择,但我不知道这是否是解决我问题的“正确”方法。非常感谢。
link_to 'Fade sample', url, :data-timeout => 1500, :remote => true