1

私が取り組んでいるサイトの基本的なルーティング機能を構築しました。
受信 URL をチェックしてから、ブラウザーをサイトの適切な部分に送信するという考え方です。

着信 URL がプッシュ先の URL と同じ場合、pushState が起動しないことに気付きました。つまり、行ってdomain.com/journalも発火しません。URL は、ルーターがプッシュすることになっている URL と同じです: History.pushState({ id: 'journal' }, site.title+' — '+'Journal', site.url+'/journal' );)。

しかし、domain.com/journal/代わりに置くと、発火します。何故ですか?


簡素化された宛先コード

setTimeout(function() {
      uri = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1');
      if(uri === 'journal') {
        uri = window.location.pathname.split( '/' );
        if(uri[2]) {
          History.pushState({ id: 'post', no: uri[2] }, site.title+' — '+'Journal', site.url+'/journal/'+uri[2] );
        } else {
          History.pushState({ id: 'journal' }, site.title+' — '+'Journal', site.url+'/journal' );
        }
      } else if(uri === 'contact') {
        History.pushState({ id: 'contact' }, site.title+' — '+'Contact', site.url+'/contact' );
      } else {
        History.pushState({ id: 'gallery' }, site.title, site.url );
      }
}, 1);

History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
    var State = History.getState(); // Note: We are using History.getState() instead of event.state  
    Roots.common.history(State);
}

history: function(State) {
    navigate(State.data.id, State.data.no);
},

navigate: function(section, no) {
  if(section === 'gallery') {
    // do gallery stuff
  } else if(section === 'journal') {
    // do journal stuff
  } else if(section === 'contact') {
    // do contact stuff
  } else if(section === 'post') {
    // do post stuff
  }
}
4

1 に答える 1

1

pushState と一緒にランダムなデータを送信することが何であれ、それを起動させる簡単な解決策

History.pushState({ id: 'gallery', randomData: window.Math.random() }, site.title, site.url );
于 2014-06-08T23:20:09.003 に答える