Ho implementato History.js su un'applicazione di test locale. Tutto sembra funzionare, tuttavia se premo il pulsante Indietro nel browser, il contenuto precedente non viene ripristinato.Ripristino del contenuto quando si fa clic sul pulsante Indietro con History.js
Devo effettivamente caricare nuovamente il contenuto manualmente (ad esempio, effettuare un'altra chiamata Ajax) quando l'utente preme il pulsante Indietro? Allora come fa Github a farlo? Vedo che non fanno un'altra chiamata ajax quando si fa clic sul pulsante Indietro nell'albero del codice.
Ecco il mio codice:
History.Adapter.bind(window,'statechange',function()
{
var State = History.getState();
History.log(State.data, State.title, State.url);
});
$('a').each(function(index, link) {
if ($(link).attr('data-ajax-disabled') != 'true') {
$(link).click(function(event)
{
var clips = $(this).attr('data-ajax-clips') || '';
$.ajax($(this).attr('href'),
{
data: {_clips:clips},
success: function(data)
{
var data = $.parseJSON(data);
History.pushState({state:1}, data.title || document.title, 'http://127.0.0.1/site/www/');
$.each(data.clips, function(key, val)
{
$(key).replaceWith(val);
});
}
});
return false;
});
}
});
data.clips è un array JSON che contiene id degli oggetti HTML come chiave e il contenuto effettivo HTML come valore. Per esempio
=> 'contenuti nell'intestazione div' '#header'
Come osservato, la sostituzione funziona bene. Eseguo un numero casuale nell'intestazione. Ogni clic su un link sputa un altro numero casuale nell'intestazione. Tuttavia, se spingo il pulsante Indietro il numero rimane lo stesso, verrà ripristinato solo il titolo (anche il numero casuale).
Sì, se si ignora la funzionalità di cronologia del browser, allora sei responsabile per la visualizzazione del contenuto corretto quando un utente va avanti o indietro. Per evitare un'altra chiamata AJAX per lo stesso contenuto, puoi nasconderla sulla pagina usando '.hide()', o memorizzare l'HTML in una variabile, quindi ricaricarla quando richiesto. –