2012-04-15 26 views
3

In meiner Website befindet sich eine Navigationsleiste auf der linken Seite. Wenn ich auf die Links klicke, ändert sich das #container div auf meiner Seite, aber nichts anderes durch Ajax. Ich möchte Buttons hin- und herschieben, die nur das #container div im Zustand zurück und vorwärts bringen. Ich habe gelesen, dass history.js das Beste dafür wäre, und ich habe die html5-History-API durchgesehen, aber ich verstehe nicht, wie ich mein Problem lösen kann. Wie würde ich darüber hinaus eine Schaltfläche zum Aktualisieren implementieren?Wie benutzt man history.js?

Antwort

6

Es klingt wie das, was Sie suchen, ist etwas wie PJAX.

Nur um klar zu sein, die HTML5 History API (die History.js implementiert/Shims) nicht den Status Ihrer Anwendung direkt erhalten. Stattdessen bietet es einen Mechanismus zum Zuordnen von Änderungen in der Fenster-URL zu einer Funktion, die für das tatsächliche Rendern der Änderungen verantwortlich ist. Die readme bietet einen Einblick in, wie dies erreicht werden könnte:

History.Adapter.bind(window, 'statechange', function() { 
    var State = History.getState(); 
    History.log(State.data, State.title, State.url); 
}); 

Wenn stattdessen den Zustand der Anmeldung, in der Sie den Behälterinhalt verändern (ohne PJAX oder eine ähnliche Bibliothek), können Sie stattdessen den Inhalt speichern von #container Sie jedes Mal pushState aufrufen und die Handler-Funktion einstellen, so etwas zu tun:

History.Adapter.bind(window, 'statechange', function() { 
    var State = History.getState(); 
    $('#container').empty().append(State.data.content); 
}); 

History.pushState({content:"Hello, world!"}, "State 1", "?state=1"); 

natürlich müssen Sie dies ändern, um die Besonderheiten Ihrer Situation zu reflektieren.

+0

Ok Ich überprüfte die Pjax-Sache und es scheint zu funktionieren. Ich weiß zwar nicht, wie ich das Lade-Gif funktioniere. Dies ist die Codezeile, die das Pjax ausführt, wenn auf einen Link geklickt wird: $ (li a) pjax ('# container'); 'und dann der Link'

  • main
  • ' main.html ist eine Datei, die im #container angezeigt wird. Es funktioniert, und ich kann hin und her gehen, aber es sieht sehr glitschig aus und ich möchte wissen, wie man das Lade-Gif implementiert. – Wilfred

    +0

    Auch weil main.html eine tatsächliche Datei ist, die es aufruft, kann ich die Seite nicht aktualisieren oder es wird nur die Ausgabe der Dateien angezeigt. Wie kann ich das beheben? – Wilfred