在我的Rails 3.2.3应用程序中,我在application.html.erb中有以下代码,每隔30秒刷新整个页面:
<meta http-equiv="refresh" content="30">
它运行良好(它是一个内部Intranet,我们需要确保每个人都在查看最新信息,无论他们在计算机上打开的页面有多长时间),而且任何更复杂的东西,例如AJAX,都是不必要的。
我想要做的是使用某种'unless'语句包装元标记,例如:
<% unless page.contains('input') %>
<meta http-equiv="refresh" content="30">
<% end %>
如果页面包含表单输入字段,这将阻止页面在30秒后刷新。即使您正在填写页面的一半,页面也会刷新。
这样的事情是否可行。我意识到上面的代码示例永远不会起作用,它纯粹是为了解释我想要实现的目标。
一种可能性是检查documentation中所述当前页面的操作:
<% current_page?(:action => 'new') %>
但我不完全确定这是否会奏效。
答案 0 :(得分:1)
我可能会使用脚本来处理此问题,并删除<meta http-equiv='refresh'>
标记。
var reloadTime = 30;
body.onload = function() {
// Reload after 30s if no input tags are found
if (document.getElementsByTagName("input").length === 0) {
setTimeout(function() {window.location.reload(true);}, reloadTime);
}
};
如果您正在使用jQuery或其他库,请将其附加到DOM就绪函数,如:
$(document).ready(function() {
var reloadTime = 30;
if ($("input").length === 0) {
setTimeout(function() {window.location.reload(true);}, reloadTime);
}
});