3

我在 erb 模板中有一个 div,单击它时我想触发控制器的显示操作。

<div class = "box"> 
  Content within the box
</div>

<script>
  $(document).ready(function() {
    $('.box').click(function(){
      $.get(<%=hack_path(h) %>)
    });
  });
</script>

我收到错误“参数数量错误(0 代表 1)”。我想知道我是否在正确的轨道/模式上以达到预期的结果,还是应该使用其他技术?

这是实际的模板:

<h1>Hacks</h1>

<% @hack.each do |h| %> 
  <div class = "box">
    <table>
    <h3><%= h.hack_name %></b></h3>
    <%= h.id %>
    <span id = "showhack"> <%= link_to 'Show', hack_path(h) %></span>
    <%= link_to 'Edit', edit_hack_path(h) %>
    <%= link_to 'Destroy', hack_path(h), method: :delete, data: { confirm: 'Are you sure?' } %>
    <%= link_to "Get Data", :controller => :admins, :action => :checkSerials, :method => :get %>

  <% h.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, [h, 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>
 <script>
 $(document).ready(function() {

   $('.box').click(function(){
   $.get(<%= hack_path(@hack).to_json %>)
   });
  });
 </script>

<div><%= link_to 'New Hack', new_hack_path %></div>
4

1 回答 1

1

您必须转义字符串。否则它将被渲染为$.get(/what/ever/path)当然是错误的。

我建议使用to_json(),它也可以保护您免受其他讨厌的影响:

$.get(<%= hack_path(h).to_json %>) 
# renders to $.get("/what/ever/path")

但通常你有多个地方使用同一个处理程序,你最终会使用数据标签将 URLS 添加到标记中并使用$.data().

<div data-url=<%= hack_path(h).to_json %>> 

在javascript部分中:

var url = $(target).data("url");

例如,如果您想让“hack”的标题可点击:

<td class="hacktitle" data-url=<%= hack_url(h).to_json %>><%= link_to s.title, [h, s] %></td>

/* somewhere else in javascript */

$("table.hacks").on("click", "td.hacktitle", function(event) {
    var targetTd = $(event.target);
    var url = targetTd.data("url");
    $.get(url);

当您使用 HAML 时,所有这些都更加方便(无论如何我都会推荐)

%div{:data => {:url => hack_path()}}
  some content
于 2013-03-07T15:01:03.700 回答