我的一个rails控制器中有一个数组。我想在相应的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次迭代?
第二个问题:为什么getElementById
的结果在null和(非null)之间交替?
答案 0 :(得分:1)
问题很可能是内部代码是ruby,无论js代码中的if
条件如何,都会执行该代码。通过使用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 %>