【问题标题】:How to access the current rails object id in javascript如何在javascript中访问当前的rails对象ID
【发布时间】:2012-03-16 07:13:01
【问题描述】:

如果我在一个视图上,如何访问当前由该视图表示的 ruby​​ 对象的 ID?

例如如果我在 blah.com/jobs/1 上,我如何获得 1?

我曾考虑修剪当前 URL,但这似乎太脆弱了,尤其是考虑到我有嵌套资源。我能想到的唯一其他简单方法是设置一个隐藏字段,但在没有任何表单的显示页面上设置隐藏输入似乎很愚蠢。

【问题讨论】:

    标签: javascript ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    你说得对,解析 URL 是个坏主意,你最好在某个地方明确地提供它。

    您可以将data-job-id 属性附加到HTML 中的标准元素,甚至可能是<body>。然后你的 JavaScript 可以做这样的事情:

    var id;
    var $body = $('body');
    if(id = $body.data('job-id'))
        // Do some job things.
    else if(id = $body('user-id'))
        // Do some user things.
    

    而且您仍然符合 HTML5 标准,而且您不必为隐藏输入而烦恼。

    当然,您不必使用 <body>,您的 HTML 可能有一些顶级容器,其中包含已知的 id,因此您可以使用它。

    【讨论】:

      【解决方案2】:

      我建议以下之一:

      1. 按照 Jamsi 的建议,直接在您的 javascript 中包含 <%= params[:id] %><%= @job[:id] %>

        var id = <%= @job[:id] %>

      2. 如果您的 javascript 在单独的文件中,请遵循 Mu 的建议。将<%= @job[:id] %> 添加到您的视图的 html 标记之一,并对其进行查询。

      【讨论】:

        【解决方案3】:

        不就行了吗?

        【讨论】:

          【解决方案4】:

          这是一个完整的例子,结合了已经提供的答案。

          使用params[:id] 和body 元素,以下内联语句将生成data-params-id 属性,可以在布局文件中通用:

          <body <%= "data-params-id=#{params[:id]}" if params.has_key?(:id) %> >
          

          然后可以通过以下方式访问:

          JavaScript:

          var dataId = document.body.getAttribute('data-params-id');
          

          jQuery:

          var dataId = $('body').data('params-id');
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-31
            • 1970-01-01
            • 1970-01-01
            • 2021-01-30
            • 2013-05-16
            • 1970-01-01
            • 2011-11-18
            • 1970-01-01
            相关资源
            最近更新 更多