2012-04-19 21 views
12

Próbuję znaleźć sposób na wykrycie, kiedy użytkownik wciśnie przycisk wstecz/do przodu w przeglądarce.trasy kręgosłupa - wykrywanie przycisku wstecz wstecz przeglądarki naciśnij

Używam szkieletu do obsługi tras, wraz z kręgosłupem do renderowania moich widoków.

Problem polega na tym, że nie mogę podłączyć się do tej strony, aby zmienić wydarzenie z dowolnego miejsca.

Próbowałem umieszczać dziennik w mojej funkcji initialize dla moich widoków .. ale nie jest on wyzwolony, gdy używam przycisku Wstecz.

Naprawdę nie wiem, jak inaczej wykryć tę zmianę strony.

Odpowiedz

-2

Powinieneś użyć Backbone.Router i upewnij się, że nie zapomnisz o Backbone.history.start() podczas uruchamiania aplikacji.

Kilka przydatnych informacji można znaleźć here i here

Faktycznie drugi link nie jest artykuł, ale blog. A facet, który to napisał, wydaje się naprawdę dużo wiedzieć na ten temat.

UPD: Chodzi o to, że router sieci szkieletowej wiązał metody, gdy zmienia się adres URL. Więc po prostu powinieneś umieścić swoją logikę w tej metodzie i w ten sposób będziesz w stanie to śledzić. Może to nie jest zautomatyzowany sposób, a napisanie kodu zajmie trochę więcej, ale myślę, że powinno zadziałać.

+2

Tak, czytałem go. Chodzi o to, że firewall szkieletu sieci szkieletowej wiązał metody podczas zmiany adresu URL. Więc po prostu powinieneś umieścić swoją logikę w tej metodzie i w ten sposób będziesz w stanie to śledzić. Może to nie jest zautomatyzowany sposób, a napisanie kodu zajmie trochę więcej, ale myślę, że powinno zadziałać. – Ph0en1x

+0

@ Ph0en1x Masz rację, że użycie obiektu History kręgosłupa może stanowić rozwiązanie, ponieważ monitoruje zdarzenie "popstate", które jest uruchamiane, gdy przycisk powrotu jest naciśnięty podczas nawigacji w witrynie. Jednak twoja odpowiedź nie wyjaśnia, że ​​to właśnie mówisz, ani jak OP rozwiązałby swój problem za pomocą Backbone.History. –

+1

Zabawne, istnieje wiele minusów dla tej odpowiedzi. Jednak sama odpowiedź celowo poprawi się nawet pod koniec 2015 roku. Wygląda jednak na to, że ludzie nie chcą czytać uważnie i nie chcą myśleć. Chcą tylko skopiować i wkleić fragment. – Ph0en1x

1

można przedłużyć Backbone.Router i przeciążenie metody route i open. Masz wszystkie zmiany strony obsługiwane w tych dwóch metod. Więc po prostu skopiuj je z pliku głównego i baw się z nim.

0

Oczywiście nawet GitHub nie wie, w jaki sposób wykryć, który przycisk został naciśnięty;) one użyć tego kodu:

slideTo: function (a) { 
     var b = this.pathFromURL(a), 
     c = this.frameForPath(b), 
     d = $("#slider .frame-center").attr("data-path") || ""; 
     c.is(".frame-center") || (d == "/" || b.split("/").length > d.split("/").length ? 
     this.slideForwardTo(a) : this.slideBackTo(a)) 
} 
10

można powiązać wywołania zwrotnego do Backbone route zdarzenia:

Backbone.history.on('route', function() { 
     // Do your stuff here 
    }); 

You może użyć Backbone.history.getFragment(), aby wiedzieć, czy stoisz.

+0

Brak nawiasu zamykającego) na końcu twojego fragmentu – fadomire

3

Po naciśnięciu przycisku Wstecz wyzwala się zdarzenie popstate.

Używam ten kawałek kodu:

// listening for the browser's back button 
window.addEventListener('popstate', function(e) { 
    router.navigate(Backbone.history.getFragment(), { trigger: true, replace: true }); 
}); 
Powiązane problemy