Daniel F Pupius opisany problem jak:ember.js przywrócić zwój na historii, Reset przewinąć na link
Wiele stron dostać to źle i to naprawdę denerwujące. Gdy użytkownik nawiguje za pomocą przycisku przewijania do przodu lub do tyłu w przeglądarce, pozycja przewijania powinna być taka sama, jak poprzednio na stronie. To czasami działa poprawnie na Facebooku, ale czasami nie działa. Google+ zawsze traci pozycję przewijania.
W związku z tym istnieje już wiele pytań dotyczących resetowania przewijania do góry strony podczas przeglądania nowej strony. Cookbook również shows how to hook into Route.activate
ember.js za:
export default Ember.Mixin.create({
activate: function() {
this._super();
window.scrollTo(0,0);
}
});
Jednak to tylko rozwiązuje połowę problemu. Gdy użytkownik użyje przycisków wstecz/przewijania do przodu, pozycja przewijania nie zostanie przywrócona, ale po prostu zresetowana.
Istnieje wiele prób rozwiązania tego problemu, wielu po prostu przechowuje pozycję przewijania wewnątrz instancji Ember.Controller
, na przykład w tym article. Jest to jednak tylko częściowe rozwiązanie. Jeśli kontroler jest używany wiele razy, tylko jeden stan przewijania zostanie zachowany.
Jak można zachować domyślną implementację przeglądarki przywracania starego stanu przewijania? Tak więc nie rób nic, jeśli Route.activate
został wywołany ze zmiany stanu historii html5?
Myślę, że to nie zapamięta dwóch różnych pozycji przewijania, jeśli kontroler był odwiedzany dwa razy? – bouke
Ten mixin dotyczy trasy, a nie kontrolera. Zapamiętuje pozycję przewijania po opuszczeniu trasy (patrz sekcja "dezaktywuj"), a następnie przywraca ją po powrocie. – JeremyTM