【问题标题】:Rails Hash in javascript, access valuesjavascript中的Rails Hash,访问值
【发布时间】:2015-07-19 03:40:14
【问题描述】:

我有以下 javascript 代码:

<input type="hidden" name="query_form_select_ops" id="query_form_select_ops" value='<%= schema%>'  />

<script>
  function select_pk2(cell){
  var val = $('#query_form_opt_'+cell+'_1').val();
  var opts = $('#query_form_select_ops').val();  
  }
</script>

例子:

schema 是一个典型的 ruby​​ 哈希:

{ 
  "car"=>{"col"=>"blue", "engine"=>"HHd4M"},
  "train"=>{"col"=>"black", "engine"=>"8495f"}
}

变量val 的值为“train”,opts 是整个 ruby​​ 哈希

在 ruby​​ 中访问 traincolengine:schema["train"]。我怎样才能在 javascript 中做同样的事情?
我试过了:

var select = opts[val]

但它告诉我 var 未定义。给定一个哈希值和其中一个键,如何在 javascript 中访问 ruby​​ 哈希值?

【问题讨论】:

    标签: javascript ruby-on-rails ruby hash


    【解决方案1】:

    schema 哈希转储为 json,然后用 javascript 将其解析回。像这样的:

    <input type="hidden" name="query_form_select_ops" id="query_form_select_ops" value='<%= schema.to_json %>'  />
    

    还有脚本:

    function select_pk2(cell){
      var val = $('#query_form_opt_'+cell+'_1').val();
      var opts = JSON.parse($('#query_form_select_ops').val());  
    }
    

    这样你应该能够以你想要的方式访问值。

    您的示例中的每个散列值也是散列值,因此您可以使用适当的键访问它们。像这样:

    opts['car']['col'];
    

    【讨论】:

    • 我做到了,但如果我提醒(opts[val])我得到 [object Object]。 alert(opts[val][0]) 和 alert(opts[val][1]) 未定义
    • 这是正常行为,因为您也将哈希值作为嵌套值。并且映射在字符串上的哈希(在这种情况下 - javascript对象)是“[object Object]”。您也可以访问每个值的各个属性。尝试console.log(opts[val]),您应该会在浏览器的开发控制台上看到正确的输出(在 chrome 或 ff 上)。如果您想将 opts[val] 作为字符串 (json) 返回。只需执行JSON.stringify(opts[val]),您应该会得到 json 作为警报输出。
    • 我已经更新了答案。难怪您将opts[val][0] 视为未定义,因为在任何散列值中都没有这样的键。以opts[val]['col'] 为例。
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2011-03-16
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多