0

我正在查询 Rails 是否通过 erb 中的 has many through 关系存在记录:

<% if @hack.serials %>

最终,如果“@hack”中不存在“序列”,我想通过 jquery 将“显示:无”添加到 div 的类中。

有没有一种通过erb在rails和jquery之间进行通信的模式?

编辑

这里的想法是,如果没有数据,那么我不希望选项卡及其内容出现。并且在编辑“hack”并重新加载页面之前,div“chart-table”将没有数据,因此不需要变得可见。

<div class = "chart-table" 
  <% if @hack.serials %>
    <%= raw 'style="display:block"' %>
  <% end %>>
<!-- TABS -->
<div id="tabs">
  <ul>
    <li><a href="#tabs-1">Chart</a></li>
    <li><a href="#tabs-2">Last 5 Table</a></li>
  </ul>
<!-- CHART -->
<div id="tabs-1">
  <div id="container" style="height: 500px; min-width: 500px"></div>
</div>
<!-- TABLE -->
<div id="tabs-2">
  <table class = "table-condensed">
    <%= @hack.id %>
    <% @hack.serials.each do |s| %>  
    <tr>
       <th>Series Title</th>
        <th>Series Name</th>
        <th>Series Id</th>
      <% s.observations.sort{|a,b| a.id <=> b.id}.last(5).each do |o| %>
        <th><%= o.date %></th>
      <% end %>
    </tr>    
    <tr>
      <td><%= link_to s.title, [@hack, s] %></td>
      <td><%= s.series_name %></td>
      <td><%= s.id %></td>
    <% s.observations.sort{|a,b| a.id <=> b.id}.last(5).each do |o| %>
      <% if s.units_short == 'Mil. of $' %>
        <td><%= number_to_currency(convertMtoBHack(o.value), :precision => 0) %></td>
        <% else %>
          <td><%= number_to_currency(o.value, :precision => 0) %></td>
        <% end %>
      <% end %>
    </tr>
    <tr>
      <td><%= s.frequency_short %></td>
      <td><%= s.units_short %></td>
    </tr>
    <% end %>
  </table>
</div>

4

4 回答 4

2

我不确定你为什么觉得需要通过 jQuery 来做这件事。

为什么不直接写div的style属性呢?

<div <%= @hack.serials ? 'style="display:none"' : '' %>>
于 2013-03-18T21:04:46.760 回答
1

就像是:

<script>
    <% unless @hack.serials.map(&:name).include? "My Serial" %>
        $('#my_serial_id').css('display', 'none');
    <% end %>
</script>

如果您正在寻找名称为“我的序列”的序列并且没有找到它,则停止显示相应的 div。

Rails 代码在服务器端执行,然后呈现给执行 javascript 的客户端。所以你可以将任何你想要的东西从 Rails 传递给 javascript。

FIY 将 javascript 传递给 Rails 需要其他技巧和神奇的东西(例如 ajax)。

于 2013-03-18T21:02:55.580 回答
0

在某些 ajax 类之后(在 DOM 重新加载之前)会显示这个 div 吗?如果没有,我会质疑你是否应该写它。

我会对 Mark Hollands 的回答保持警惕,因为尽管它有效,但如果您将来对该元素进行任何 UI 更改,它可能会出现问题。如果您需要编写元素,我会坚持使用直接条件并将“静态”代码放在部分中:

<% if @hack.serials %>
  <div>
    <%= render 'something' %>
  </div>
<% else %>
  <div style='display:none'>
    <%= render 'something' %>
  </div>
<% end %>
于 2013-03-19T01:12:22.230 回答
0

Rails 热线的好人帮我找到了答案。

<% if @hack.serials.present? %>
  <div class = "chart-table">
    <!-- TABS -->
    <div id="tabs">
      <ul>
        <li><a href="#tabs-1">Chart</a></li>
        <li><a href="#tabs-2">Last 5 Table</a></li>
      </ul>
    </div>
  </div>
<% end %>

如果 "empty" @hack.serials 返回一个空数组但返回 true。使用@hack.serials.present?如果它是一个空数组,这是我正在寻找的行为,则返回 false。

于 2013-03-20T03:19:51.643 回答