1

我的一个导轨控制器中有一个阵列。我想在相应的 js.erb 文件中循环遍历它的元素。问题是它似乎为每个元素迭代两次。这是代码:

<% @array.each do |element| %>
    table_row = document.getElementById("<%= element[:row_id]%>")
    if (table_row != null)
    {
        <% p "row found:" %>
        <% p element[:row_id] %>
    }
    else
    {
        <% p "row not found:" %>
        <% p element[:row_id] %>
    }
<% end %>

可以说@array有3个元素。那么上面的代码会产生一个非常奇怪的输出:

row found:
1
row not found:
1
row found:
2
row not found:
2
row found:
3
row not found:
3

我的第一个问题是:为什么@array有 3 个元素时会有 6 次迭代?
第二个问题:为什么getElementByIdnull和(not null)的结果交替出现?

4

1 回答 1

1

问题很可能是内部代码是ruby,无论ifjs代码中的条件如何都会执行。通过使用p您告诉 ruby​​ 将这些行打印到服务器控制台,因为 js 将仅在客户端执行,因此没有机会将任何内容放入服务器控制台。

基本上你做两件事:首先你生成一个包含一些带有空块的条件的 js,然后你在 rails 服务器控制台打印一些行。你不能混合那样的东西。使用这样的东西,看看:

<% @array.each do |element| %>
    table_row = document.getElementById("<%= element[:row_id]%>")
    if (table_row != null)
    {
        alert("row found: <%= element[:row_id] %>");
    }
    else
    {
        alert("row not found: <%= element[:row_id] %>");
    }
<% end %>
于 2012-08-23T10:33:46.910 回答