【问题标题】:Iterate through a hash from the Rails controller in js在 js 中遍历 Rails 控制器的哈希
【发布时间】:2016-04-21 23:23:11
【问题描述】:

在我的 Rails 控制器中,我创建了一个如下所示的哈希:

@data = {

 term => {        
   node_id => {
    :name,
    :matchcode,
    :credits,
    :parts => [{
      :mp_id,
      :matchcode,
      :nr,
      :selected
    }]

}}

现在我想通过这个哈希在 js 中迭代以获取键和值。 起初我需要这个词,我试图用类似这样的词来理解它:

for(var s in '#{@data}') {
   console.log(s);
}

但我似乎做错了什么,这是我第一次使用 Rails..

【问题讨论】:

    标签: javascript ruby-on-rails view controller haml


    【解决方案1】:

    将数据从服务器端 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 向您的服务器发出请求以接收数据。在许多情况下可能是矫枉过正。

    【讨论】:

    • 感谢您提供这个有用的答案,是否可以/建议将所有 js 代码转换为 haml + ruby​​,仅使用一小部分 js 以通过 haml 获得迭代?
    猜你喜欢
    • 2021-07-09
    • 2014-06-01
    • 2012-08-22
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2022-07-21
    • 2013-11-25
    • 2016-04-12
    相关资源
    最近更新 更多