RAILS自动刷新部分

时间:2016-09-10 11:59:07

标签: jquery html ruby-on-rails refresh

我有一个带有动作节目的控制器事件:

  def show
    @event = Event.get(params[:id])

    if !connected? || !@event 
      return redirect_to request.referrer || root_path
    end

    @requests = @event.get_requests
  end

在视图中 show.html.erb 我有

<script>
  $(document).ready(
     function() {
      setInterval(function() {
        $('#requests').load('/events/reload_requests');
    }, 2000);
  });
</script>
...
<div class="party-block" id="requests">
    <%= render partial: 'requests' %>
</div>
...

javascript函数调用控制器方法 events / reload_requests

def reload_requests
  @requests = @event.get_requests
  render partial: 'events/requests'
end

部分 _requests.html.erb 的内容:

<%= Time.now %>
<h4><%= t '.requests' %></h4>
<% @requests.each do |r| %>
 <span class="request">
 ...
<% end %>

问题:javascript函数会在div #requests 中加载 show.html.erb 页面的所有内容,但在 show.html的副本中div中的.erb ,它正确刷新div #request: enter image description here 你可以看到,在show#requests中我有show的内容。 比你

1 个答案:

答案 0 :(得分:0)

重新阅读你的问题之后,我想我理解你的问题了。

当您调用#load方法时,返回的HTML实际上是您的整个show.html.erb模板..它会插入到您的$('#requests')元素中。这是对的吗?

在jQuery文档中,您可以在http://api.jquery.com/load/

找到以下内容
  

加载页面碎片

     

与$ .get()不同,.load()方法允许我们指定一部分   要插入的远程文档。 (...)

     

$(“#result”)。load(“ajax / test.html #fragment”);

如果您修改脚本标记,可能如下:

<script>
  ...
        $('#requests').load('/events/reload_requests #requests');
  ...
</script>

您只能插入您感兴趣的HTML片段。

如果那不是你的问题,请告诉我。

另外,如果您向'event/reload_requests'的请求返回了show.html.erb模板,则可能会错误地将event/reload_requests端点发送到您的#show操作。

修改#1

修复嵌套div问题的最简洁方法似乎是从那里添加一个容器div并加载:

$('#requestsContainer').load('/events/reload_requests #requests');

HTML:

<div id="requestsContainer">
  <div class="party-block" id="requests">
      <%= render partial: 'requests' %>
  </div>
</div>