开发者

Rails hash of hashes in Javascript

i have a hash of hashes in rails, like :

{"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开发者_StackOverflow中文版_hp"=>205, "damage"=>95, "attacker"=>#<User id: 1, email:...>} ...

So, as you can see, in this hash, there is a number of hashes that represent a combat turn. There is also a hash entry that contains a full object.attributes in it (the 'attacker' entry').

Now, i want to represent that using JQuery in Rails. I've tried to use something like :

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

to get the values in Javascript. This works, but there is an important problem. It seems that it creates an array of strings. Thus, the internal hashes are now strings, which makes it impossible for me to parse in javascript.

My question is, how can i access values like :

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

as i could easily do in a @combat.each loop inside Rails view ?


Are you familiar with JSON structure? You can use @combat.to_json and then work with the json instead of an array.

With that you can easily access values as you do in rails, for example:

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

foo.bar or foo["bar"] will return 1

foo.x will return array [1,2,3]

foo.y.a will return "string"

etc...

Edit:

Maybe you will need to use @combat.to_json.html_safe as it should be html parsed when you use <%= %>


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

returns object
so

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

may be used as js object

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜