Мета-обновление, если на странице нет полей ввода? - PullRequest
1 голос
/ 02 апреля 2012

В моем приложении Rails 3.2.3 у меня есть следующий код в application.html.erb для обновления всей страницы каждые 30 секунд:

<meta http-equiv="refresh" content="30">

Это работает хорошо (это внутренняя интрасеть, и мы должны убедиться, что все смотрят самую свежую информацию независимо от того, как долго они оставили страницу открытой на своем компьютере), и что-либо более сложное, такое как AJAX, может показаться ненужным.

То, что я хотел бы сделать, это иметь какое-то выражение «кроме», заключающее метатег, такое как:

<% unless page.contains('input') %>
    <meta http-equiv="refresh" content="30">
<% end %>

Это предотвратит обновление страницы через 30 секунд, если страница содержит поле ввода формы. В настоящий момент страница обновится, даже если вы наполовину заполняете страницу.

Возможно ли что-нибудь подобное. Я понимаю, что приведенный выше пример кода никогда не сработает, это просто объяснение того, чего я пытаюсь достичь.

Одна из возможностей - проверить действие текущей страницы, как указано в документации :

<% current_page?(:action => 'new') %>

но я не совсем уверен, сработает ли это.

1 Ответ

1 голос
/ 02 апреля 2012

Я бы, вероятно, обработал бы это вместо сценария и удалил бы тег <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);
   }  
});
...