2011-08-20 9 views
5

Dlaczego obiekt goog.history.Html5History wywołuje zdarzenie goog.history.EventType.NAVIGATE dwukrotnie za każdym razem, gdy fragment jest zmieniany? To jest przykład kodu:Zamknięcie Google - Html5History wywołuje zdarzenie NAVIGATE dwa razy:

var history = goog.history.Html5History.isSupported() 
     ? new goog.history.Html5History() 
     : new goog.History(); 
goog.events.listen(history, goog.history.EventType.NAVIGATE, function(e) { 
     console.log(['navigation', e.target.getToken()]); 
}); 
history.setEnabled(true); 

I to jest log:

["navigation", "!/properties/new"] 
["navigation", "!/properties/new"] 

UPD: Kiedy zorientowali się, że są dwie różne wartości isNavigation dziedzinie e obiektu w zwrotnego. Pierwszy raz zajmuje wartość false, a po raz drugi przyjmuje wartość true. isNavigation oznacza:

isNavigation Prawda jeśli zdarzenie zostało wywołane przez działanie przeglądarki, takie jak do przodu lub do tyłu, klikając na link, edytując URL lub dzwoniąc window.history (przejdź | powrót | do przodu.). Fałsz, jeśli token został zmieniony przez wywołanie setToken lub replaceToken.

Ale jak uzyskać tylko jeden nawet zwolniony?

Odpowiedz

1

Spotkałem ten sam problem. Ale w moim przypadku oba wydarzenia mają isNavigation==true.

init = function() { 
    var h = goog.history.Html5History.isSupported() ? 
     new goog.history.Html5History() : new goog.History(); 

    goog.events.listen(h, goog.history.EventType.NAVIGATE, navigationCallback); 
    h.setEnabled(true); 
}; 

navigationCallback = function(e) { 
    console.log(e, e.token, e.isNavigation); 
}; 

// And then: 
h.setToken("example1"); 
h.setToken("example2"); 
// And click "back" button in browser 

wyjściowa:

goog.history.Event "example1" false 
goog.history.Event "example2" false 
goog.history.Event "example1" true 
goog.history.Event "example1" true 
+1

Tutaj można znaleźć prosty patch: http://code.google.com/p/closure-library/issues/detail?id=449 To usunięcie wiązania Html5History do popstate zdarzenie przeglądarki. –

Powiązane problemy