Używam history.js do obsługi przycisku Wstecz. W history.js statechange jest uruchamiany za każdym razem, gdy robię pushstate. Czemu?Statechange jest uruchamiane za każdym razem, gdy robię stan push
Odpowiedz
Według tego discussion on github, to spodziewane zachowanie history.js
This pull request twierdzi, że zmodyfikowane history.js być bardziej inline z W3C specyfikacji.
Chciałem dodać, tak jest oczekiwane zachowanie History.js. W tym samym czasie są more discussions, które krytykują to zachowanie, ponieważ nie jest to standard W3C i powoduje pewne zamieszanie.
Krótko mówiąc, aby odpowiedzieć na pytanie: W funkcji History.js pushState()
jest wywołanie do statechange na końcu.
Upside tego rozwiązania jest to, że możesz po prostu zmienić (wypchnąć) swój nowy stan i pozwolić funkcji onstatechange() - obsłużyć przejście. Downside jest to, że nie jesteś w stanie obsłużyć wyjątków/lub zapisać ich w module obsługi zdarzenia onstatechange.
Ja osobiście wolę sposób obchodzenia się z tym W3C, ponieważ można rozróżnić przyciski wstecz/do przodu i pushState. W History.js opiekunowie pracują na wewnętrznym rozwiązania flagi, który pozwala na zmianę tego zachowania:
zauważyć, jak powyższe połączenia [pushState-rozmowy] Zdarzenia stateChange spust, jeśli z jakiegoś powodu nie chcesz aby tak się stało potem wewnątrz uchwytu stateChange można użyć następujących:
if (History.getState().internal) { return; }
* ta funkcja jest obecnie w fazie rozwoju i może być używany tylko z „dev” wersją History.js! Nadzieję, że to pomoże kilka innych osób w przyszłości :)
Po próbując tego dokonać na jeden dzień teraz, w końcu znalazłem rozwiązanie tutaj: https://github.com/browserstate/history.js/issues/47#issuecomment-25750285
Kod jest cholernie proste, co następuje cytat z link:
po naciśnięciu swój stan
History.pushState({
_index: History.getCurrentIndex(),
someData: ...
}, someTitle, someUrl);
a następnie w przypadku wiązania
History.Adapter.bind(window, 'statechange', function() {
var currentIndex = History.getCurrentIndex();
var internal = (History.getState().data._index == (currentIndex - 1));
if (!internal) {
// your action
}
});
- 1. Kod modułu ES6 wykonywany za każdym razem, gdy jest importowany
- 2. glVertexAttribPointer potrzebny za każdym razem, gdy wywoływany jest glBindBuffer?
- 3. Powracaj różne wartości za każdym razem, gdy oczekiwane jest jMockit
- 4. Pulsuj szablon za każdym razem, gdy jest renderowany w Meteoru
- 5. Jak uniknąć wpisywania --prefix za każdym razem, gdy git poddam push/pull?
- 6. Zobacz kontroler pochodzenie zmienia się za każdym razem, gdy przedstawił
- 7. Przeciek pamięci za każdym razem, gdy wydano UIScrollView.
- 8. Pusty biały ekran za każdym razem, gdy uruchamiam symulator iOS
- 9. JSON.stringify ucieka podwójne cytaty za każdym razem, gdy stringified
- 10. Dlaczego Travis CI pobiera wszystko za każdym razem, gdy buduje?
- 11. Dlaczego otrzymuję ostrzeżenie za każdym razem, gdy używam malloc?
- 12. FullGC dzieje się za każdym razem, gdy działa CMS
- 13. Niewłaściwe widoki za każdym razem, gdy otwieram scenorys
- 14. Jak wykonać Mock zwrócić nową listę za każdym razem, gdy metoda jest wywoływana za pomocą Moq
- 15. AngularJS: potrzeba wywoływania zdarzenia za każdym razem, gdy wywoływane jest wywołanie ajax
- 16. Czy konieczne jest tworzenie klasy Java za każdym razem?
- 17. Julia kompiluje scenariusz za każdym razem?
- 18. requestAccessToEntityType - raz lub za każdym razem?
- 19. Czy [hash NSString] obliczane jest za każdym razem?
- 20. Gniazdo jest wywoływane wiele razy za każdym razem, gdy emitowany jest sygnał.
- 21. Funkcja Chrome Prerender jest anulowana za każdym razem
- 22. Widżet znika za każdym razem, gdy aplikacja jest aktualizowana na urządzeniach Samsung
- 23. x-ua za każdym razem nie działa
- 24. Wiele skrótów: za każdym razem dodawaj sól?
- 25. Sygnał zdarzenia jest wysyłany dwa razy za każdym razem
- 26. Włączanie zestawu głośnomówiącego za każdym razem, gdy wykonywane jest połączenie wychodzące
- 27. Należy wyczyścić cały projekt Android w Eclipse za każdym razem, gdy edytowany jest plik XML
- 28. Czy adresy wskaźnikowe zmieniają się za każdym razem, gdy program jest wykonywany w C?
- 29. Lambda tworząc ENI za każdym razem, gdy jest wywoływana: Limit ciupnięcia
- 30. Wykonaj skrypt powłoki za każdym razem, gdy tworzony jest nowy użytkownik.
Milion dzięki. Osobiście czuję, że rozwiązanie history.js jest lepsze. – aWebDeveloper