在 js 中迭代来自 Rails 控制器的散列
Iterate through a hash from the Rails controller in js
在我的 rails 控制器中,我创建了一个散列,如下所示:
@data = {
term => {
node_id => {
:name,
:matchcode,
:credits,
:parts => [{
:mp_id,
:matchcode,
:nr,
:selected
}]
}}
现在我想通过这个哈希在 js 中迭代以获取键和值。
起初我需要这个词,我试图用类似的东西来获得它:
for(var s in '#{@data}') {
console.log(s);
}
但是我好像做错了什么这是我第一次使用rails..
将数据从服务器端 ruby 控制器传递到客户端 javascript 代码并不是那么简单。首先,javascript 不知道 ruby 变量,上面的只是字符串 '#{data}'
,它的计算结果为自身。
有几种传递此类数据的方法:
首先,您可以在 DOM 元素服务器端设置一个 html 属性,然后在您的 javascript 中读取它。这可能是传递字符串或数字时最简单的解决方案,但对于散列而言,它非常混乱,因为您需要将其转换为 javascipt 可以理解的形式 - 转换为 JSON。尽管做起来很简单,但它只会增加额外的复杂性,而且很脏。
第二个选项是 gon gem。它为您提供了一个对象,您可以在控制器中为其分配数据。然后它处理所有转换,您可以访问 javascript:
中的所有数据
# controller
gon.my_data = {a: 1}
#js
gon.myData #=> {"a": 1}
这个解决方案很简单,但是感觉还是有点脏。
最终、最干净和更复杂的解决方案是使用 AJAX - 您的 javascript 向您的服务器发出请求以接收数据。在许多情况下可能有点矫枉过正。
在我的 rails 控制器中,我创建了一个散列,如下所示:
@data = {
term => {
node_id => {
:name,
:matchcode,
:credits,
:parts => [{
:mp_id,
:matchcode,
:nr,
:selected
}]
}}
现在我想通过这个哈希在 js 中迭代以获取键和值。 起初我需要这个词,我试图用类似的东西来获得它:
for(var s in '#{@data}') {
console.log(s);
}
但是我好像做错了什么这是我第一次使用rails..
将数据从服务器端 ruby 控制器传递到客户端 javascript 代码并不是那么简单。首先,javascript 不知道 ruby 变量,上面的只是字符串 '#{data}'
,它的计算结果为自身。
有几种传递此类数据的方法:
首先,您可以在 DOM 元素服务器端设置一个 html 属性,然后在您的 javascript 中读取它。这可能是传递字符串或数字时最简单的解决方案,但对于散列而言,它非常混乱,因为您需要将其转换为 javascipt 可以理解的形式 - 转换为 JSON。尽管做起来很简单,但它只会增加额外的复杂性,而且很脏。
第二个选项是 gon gem。它为您提供了一个对象,您可以在控制器中为其分配数据。然后它处理所有转换,您可以访问 javascript:
中的所有数据# controller
gon.my_data = {a: 1}
#js
gon.myData #=> {"a": 1}
这个解决方案很简单,但是感觉还是有点脏。
最终、最干净和更复杂的解决方案是使用 AJAX - 您的 javascript 向您的服务器发出请求以接收数据。在许多情况下可能有点矫枉过正。