我有一个带有动作节目的控制器事件:
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的内容。 比你
答案 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>