Daniel F Pupius descritto il problema come:Ember.js ripristino di scorrimento sulla storia, reimpostare scorrere sul collegamento
Un sacco di siti ottenere questo torto ed è davvero fastidioso. Quando l'utente naviga utilizzando il pulsante avanti o indietro del browser, la posizione di scorrimento dovrebbe essere la stessa dell'ultima volta che erano nella pagina. Questo a volte funziona correttamente su Facebook, ma a volte no. Google+ sembra sempre perdere la posizione di scorrimento.
Quindi ci sono già numerose domande su come reimpostare lo scorrimento nella parte superiore della pagina durante la navigazione in una nuova pagina. Cookbook di Ember.js anche shows how to hook into Route.activate
:
export default Ember.Mixin.create({
activate: function() {
this._super();
window.scrollTo(0,0);
}
});
Tuttavia questo solo risolve dimezzare il problema. Quando l'utente utilizza i pulsanti Indietro/Avanti, la posizione di scorrimento non verrà ripristinata, ma semplicemente ripristinata.
Ci sono alcuni tentativi per risolvere questo, molti semplicemente memorizzando la posizione di scorrimento all'interno dell'istanza Ember.Controller
, ad esempio in questo article. Tuttavia questa è solo una soluzione parziale. Se il controller viene utilizzato più volte, verrà mantenuto solo un singolo stato di scorrimento.
Come si può conservare l'implementazione predefinita del browser per ripristinare il vecchio stato di scorrimento? Quindi, non eseguire nulla se è stato attivato da una modifica dello stato della cronologia html5?
Penso che questo non ricorderà due diverse posizioni di scorrimento se il controller è stato visitato due volte? – bouke
Questo mixin si applica al percorso, non al controller. Ricorda la posizione di scorrimento mentre lasci il percorso (vedi la sezione 'disattiva '), quindi ripristina quando torni. – JeremyTM