2012-04-02 9 views
1

In meiner Rails 3.2.3 Anwendung ich den folgenden Code in der application.html.erb haben die ganze Seite alle 30 Sekunden aktualisiert werden: gutMeta-Aktualisierung, wenn auf der Seite keine Eingabefelder vorhanden sind?

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

Es funktioniert (es ist ein internes Intranet und wir machen müssen sicher, dass jeder die neuesten Informationen betrachtet, unabhängig davon, wie lange sie die Seite auf ihrem Computer geöffnet haben) und alles, was komplexer ist, wie AJAX, ist unnötig.

Was würde ich tun möchte, ist eine Art haben ‚es sei denn‘ Anweisung den Meta-Tag Umwickeln wie:

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

Dies würde die Seite erfrischend nach 30 Sekunden verhindern, wenn die Seite ein Formular Eingabefeld enthält . Wie es im Moment aussieht, wird die Seite aktualisiert, auch wenn Sie gerade eine Seite füllen.

Ist so etwas möglich? Mir ist klar, dass das obige Codebeispiel niemals funktionieren würde, es ist nur um zu erklären, was ich erreichen möchte.

Eine Möglichkeit ist, zu überprüfen, was die Maßnahmen der aktuellen Seite im documentation wie gesagt:

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

aber ich bin mir nicht ganz sicher, ob das funktionieren würde.

Antwort

1

Ich würde wahrscheinlich dies mit einem Skript statt, und entfernen Sie die <meta http-equiv='refresh'> Tag.

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); 
    } 
}; 

Wenn Sie jQuery oder eine andere Bibliothek verwenden, hängen Sie diese an die DOM bereit Funktionen wie in:

$(document).ready(function() { 
    var reloadTime = 30; 
    if ($("input").length === 0) { 
     setTimeout(function() {window.location.reload(true);}, reloadTime); 
    } 
}); 
+0

Wenn ich jQuery bin mit kann ich die Original-Meta-Tag verlassen und fügen Sie dann Ihre zweites Codebeispiel zu meinen bestehenden DOM-fähigen Funktionen, oder brauche ich auch das erste Beispiel? – dannymcc

+0

@dannymcc Wenn Sie bereits jQuery verwenden, benötigen Sie nur das zweite Codebeispiel und sollten das ursprüngliche Meta-Aktualisierungs-Tag entfernen. –

+0

Wenn ich das zweite Beispiel verwende, setze ich die Nachladezeit für Seiten ohne Eingabe. Angenommen, ich habe das ursprüngliche Meta-Refresh-Tag entfernt. – dannymcc

Verwandte Themen