5

フラグメントが変更されるたびに goog.history.Html5History オブジェクトが goog.history.EventType.NAVIGATE イベントを 2 回起動するのはなぜですか? これはコードの例です:

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);

そして、これはログです:

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

UPD:私が理解したように、コールバックにはオブジェクトのisNavigationフィールドの2つの異なる値があります。e1回目はfalse価値があり、2回目はtrue価値があります。isNavigation意味:

isNavigation イベントがブラウザーのアクション (進む、戻る、リンクのクリック、URL の編集、window.history.(go|back|forward) の呼び出しなど) によってトリガーされた場合は true です。トークンが setToken または replaceToken 呼び出しによって変更された場合は False。

しかし、1 人だけを解雇するにはどうすればよいでしょうか。

4

2 に答える 2

1

私は同じ問題に遭遇しました。しかし、私の場合、両方のイベントには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

出力:

goog.history.Event "example1" false
goog.history.Event "example2" false
goog.history.Event "example1" true
goog.history.Event "example1" true
于 2012-04-12T22:22:15.130 に答える
0

私はいくつかの問題を抱えています..

Google は 1 回解雇 されますかhttp://closure-library.googlecode.com/git/closure/goog/demos/history1.html

おそらくinitは2回発生しますか?

于 2013-10-18T09:23:53.517 に答える