我以前提出过这个问题,但我试图这样做的方式至少可以说是糟糕的。当某个参数在Ruby循环中完成时,我需要调用jQuery show()方法。我的想法是一个类似于示例的Javascript标记。但是由于某种原因,jQuery不能在这个javascript标签中工作。我想不出比我现在正在做的更好的方法了。
代码:<% @records.each do |record| %>
<% if record.task.project.name == "SKIP"%>
<%= javascript_tag :defer => 'defer' do -%>
$('.toil.).show();
<% end -%>
<% else %>
<%= javascript_tag :defer => 'defer' do -%>
$('.toil.).hide();
<% end -%>
this循环有效,我已经测试过了。有没有更好的方法来实现我想要的?如果有一个项目的名称跳过然后一个类需要显示…如果没有,那就得藏起来。
你并没有真正解释需要隐藏或显示的内容的本质,所以有很多方法可以做到这一点。
如果它是HTML的每条记录的一部分,只是不要在循环中呈现它:
<% @records.each do |record| %>
<% if record.task.project.name != "SKIP"%>
All the HTML
<% end %>
<% end %>
如果它是你仍然需要渲染的东西,因为它可能会在以后变得可见,设置一个类:
<% @records.each do |record| %>
<% skipIt = record.task.project.name == "SKIP" ? "display: none;" : "" %>
<span style="<%= skipIt %>">
All the HTML
</span>
<% end %>
<% end %>
如果只是一个稍后使用的标志:
<% skipIt = false %>
<% @records.each do |record| %>
<% skipIt = true if record.task.project.name == "SKIP" %>
All the HTML
<% end %>
<% end %>
...
$(function() {
<% if skipIt %>
$(".toil").hide();
<% end %>
});
等。有很多方法。这取决于你真正需要什么,而我们不知道。
(在上面的大多数示例中,功能可能应该移动到部分或至少是帮助器中。)
首先,这里有一个错别字:
$('.toil.).show();
选择器的末尾缺少一个单引号。
它们应该是,例如:
$('.toil').show();
将显示所有css类名为"辛劳"的元素。Javascript和jQuery与HTML和CSS一起工作,我有一种感觉,你正在尝试阅读或操纵ruby标签,这将不起作用,因为JS是在数据到达浏览器时执行的,所以ruby标签已经被处理并转换为HTML,以防万一:D