【问题标题】:RAILS Auto refresh partialRAILS 自动刷新部分
【发布时间】:2017-01-18 10:43:48
【问题描述】:

我有一个带有动作显示的控制器事件:

  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 函数将我的 show.html.erb 页面的所有内容加载到 div #requests 中,但在 show.html 的副本中.erb 在 div 中,它会正确刷新 div #request : enter image description here 你可以看到,在 show#requests 我有 show 的内容。 比你

【问题讨论】:

  • 我不确定我是否完全理解,但您在show.html.erb 和render partial: 'requests' 中调用render partial: 'events/requests 将在_requests.html.erb 中指定完整路径'events/requests' 在您的_requests.html.erb 文件修复中你的问题?
  • 对不起,我不明白。我必须在 reload_requests 中更改渲染部分:“请求”以渲染部分:“事件/请求”?
  • 是的,这就是我的建议
  • 不行,我也有同样的问题

标签: jquery html ruby-on-rails refresh


【解决方案1】:

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

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

在 jQuery 文档中,您可以在以下位置找到以下内容:http://api.jquery.com/load/

加载页面片段

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

$("#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>

【讨论】:

  • 可以,但我的 div 中有一个 div &lt;div id="requests" class="party-block"&gt; &lt;div id="requests" class="party-block"&gt;... &lt;/div&gt;
  • 而reload_requests是控制器事件中的私有方法
  • 参见 Edit#1 关于嵌套 div 问题。
  • 如果#reload_requests 是私有方法,您的/events/reload_requests 端点路由到哪个控制器操作?
  • 已修复,只需要重新加载服务器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多