Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 使用简单的javascript并通过Rails3和UJS传递参数_Ruby On Rails 3_Ujs - Fatal编程技术网

Ruby on rails 3 使用简单的javascript并通过Rails3和UJS传递参数

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,其中包含:

我已经看过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

  • 您可以非常轻松地使用jQuery访问自定义标记属性。例如,如果您想使用
    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

  • 您可以非常轻松地使用jQuery访问自定义标记属性。例如,如果您想使用
    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