RAILS 自动刷新部分
RAILS Auto refresh partial
我有一个带有动作表演的控制器事件:
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,但在 div 中 show.html.erb 的副本中,它会正确刷新 div #request :
enter image description here
你可以看到,在 show#requests 中我有 show 的内容。
比你
重新阅读你的问题后,我想我明白了你的问题。
当您调用 #load
方法时,返回的 HTML 实际上是您的整个 show.html.erb
模板。它被插入到您的 $('#requests')
元素中。对吗?
在 jQuery 文档中,您可以在以下位置找到以下内容:http://api.jquery.com/load/
Loading Page Fragments
The .load() method, unlike $.get(), allows us to specify a portion of
the remote document to be inserted. (...)
$( "#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>
我有一个带有动作表演的控制器事件:
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,但在 div 中 show.html.erb 的副本中,它会正确刷新 div #request : enter image description here 你可以看到,在 show#requests 中我有 show 的内容。 比你
重新阅读你的问题后,我想我明白了你的问题。
当您调用 #load
方法时,返回的 HTML 实际上是您的整个 show.html.erb
模板。它被插入到您的 $('#requests')
元素中。对吗?
在 jQuery 文档中,您可以在以下位置找到以下内容:http://api.jquery.com/load/
Loading Page Fragments
The .load() method, unlike $.get(), allows us to specify a portion of the remote document to be inserted. (...)
$( "#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>