jQuery在javascript ruby​​标签中不起作用?

时间:2011-09-19 09:24:54

标签: javascript jquery ruby-on-rails-3

我之前已经把这个问题搞砸了但是我试图做到这一点至少可以说是可怕的。当在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 -%>

这个循环工作,我测试了。有没有更好的方法来尝试我想要的东西?如果有一个名称为skip的项目,则需要显示一个类...如果没有,则需要隐藏它。看似简单但复杂......

2 个答案:

答案 0 :(得分:1)

你并没有真正解释需要隐藏或展示的内容的性质,所以有很多方法可以解决这个问题。

如果它是HTML per-record的一部分,则不要在循环中呈现它:

<% @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 %>
});

等。很多方法。取决于你真正需要的东西,我们不知道。

(在上面的大多数示例中,功能应该可以移动到部分或至少是帮助程序。)

答案 1 :(得分:0)

首先,那里有一个错字:

 $('.toil.).show();

您在选择器的末尾缺少单引号。

他们应该是例如:

 $('.toil').show();

这将显示所有带有名为“toil”的css类的元素。 Javascript和jQuery使用HTML和CSS,我觉得你试图读取或操作ruby标签,这是行不通的,因为JS是在数据到达浏览器时执行的,所以ruby标签已经处理好了并转换为html以防万一:D