Rails通过erb与jquery进行通信

时间:2013-03-18 20:37:52

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

我正在查询Rails是否记录存在于erb中有很多关系:

<% if @hack.serials %>

最终如果'@hack'中不存在'serial',我想通过jquery将'display:none'添加到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 个答案:

答案 0 :(得分:2)

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

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

<div <%= @hack.serials ? 'style="display:none"' : '' %>>

答案 1 :(得分: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)。

答案 2 :(得分:0)

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

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

<% if @hack.serials %>
  <div>
    <%= render 'something' %>
  </div>
<% else %>
  <div style='display:none'>
    <%= render 'something' %>
  </div>
<% end %>

答案 3 :(得分:0)

Rails Hotline的优秀人员帮助我找到答案。

<% 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 %>

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