【问题标题】:Rails hash of hashes in JavascriptJavascript中哈希的Rails哈希
【发布时间】:2011-06-07 22:10:05
【问题描述】:

我在 Rails 中有一个哈希值,例如:

{"round"=>1, "turn"=>1, "attacker_hp"=>11220, "defender_hp"=>205, "damage"=>95, "attacker"=>#<User id: 2, email:...>}, {"round"=>1, "turn"=>2, "attacker_hp"=>11220, "defender_hp"=>205, "damage"=>95, "attacker"=>#<User id: 1, email:...>} ...

因此,如您所见,在此哈希中,有许多代表战斗回合的哈希。还有一个包含完整 object.attributes 的哈希条目(“攻击者”条目)。

现在,我想在 Rails 中使用 JQuery 来表示它。我试过使用类似的东西:

var combat_stats = <%= array_or_string_for_javascript(@combat) %>;

获取 Javascript 中的值。这可行,但有一个重要问题。它似乎创建了一个字符串数组。因此,内部哈希现在是字符串,这使我无法在 javascript 中进行解析。

我的问题是,我如何访问如下值:

turn['attacker']['name'] or turn['attacker_hp']

就像我可以在 Rails 视图中的 @combat.each 循环中轻松做到的那样?

【问题讨论】:

    标签: javascript jquery ruby-on-rails


    【解决方案1】:

    您熟悉 JSON 结构吗?您可以使用@combat.to_json,然后使用 json 而不是数组。

    这样您就可以像在 Rails 中一样轻松访问值,例如:

    var foo = {
      bar: 1,
      x: [1, 2, 3],
      y: {
        a: "string"
      }
    }
    

    foo.bar 或 foo["bar"] 将返回 1

    foo.x 将返回数组[1,2,3]

    foo.y.a 将返回“字符串”

    等等……

    编辑:

    也许你需要使用@combat.to_json.html_safe,因为当你使用 时它应该被 html 解析

    【讨论】:

    • 而#to_json 的输出几乎总是对象或数组,正如@spyrosP 所希望的那样。 +1
    • aaa,伟大的 idaethanx 拯救了一天!
    【解决方案2】:
    console.log(JSON.parse('<%= @link.errors.messages.to_json.html_safe%>'))  
    

    返回对象
    所以

    JSON.parse('<%= @link.errors.messages.to_json.html_safe%>')  
    

    可以作为js对象使用

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 2016-08-04
      • 1970-01-01
      • 2019-03-26
      • 2011-05-27
      • 2021-10-19
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多