次のシステム構成を使用しています。
バックボーン 0.5.3 を使用する Ubuntu 11.04 上の Chromium 14.0.835.202
次のルートとコールバックが定義されたバックボーン ルーター:
, routes: {
'': 'handlerRoot'
, 'second': 'handlerSecond'
}
このシステムでは、次の動作をしています。
- 「ルート」(ホーム) にアクセスすると、「handlerRoot」が呼び出されます。わかりました、それは私が期待していたものでした。
- 'second' (#second) に移動すると、'handlerSecond' が呼び出されます。わかりました、それは私が期待していたものでした。
- 「root」にいて、次に「second」に移動し、そこで「戻る」ボタンをクリックすると、「戻る」ボタンを押した結果、2 つのコールバックが呼び出されます。最初は「handlerSecond」と呼ばれ、次の「handlerRoot」。ここで実際には、「handlerRoot」のみが呼び出されることを期待していました。ユーザーとして戻るボタンを押したときの意図は、前のページに戻ることでした。
- 次のパスを実行している場合: 'root' -> 'second' -> 'root' -> 'second'、および 'second' (最後のもの) で 1 回、[戻る] ボタンをクリックします。このプッシュの結果は、次のコールバックと呼ばれます: 最初の「handlerSecond」、次の「handlerRoot」、次の「handlerSecond」、最後に「handlerRoot」。以前の履歴の URL パスに関連付けられたすべてのコールバックが (逆の順序で) 呼び出されるようです。ここでも、expectaction は 'handlerRoot' としか呼ばれていませんでした (同じ理由で、'second' からルートに戻ってきました。すべての履歴には興味がありません)。
History の Backbone.js コードを見ていましたが、それが「onhashchange」イベントを使用していることがわかりました (互換性のあるブラウザーの場合)。そのため、ブラウザー コンソールで次のように手動で設定しました。
function locationHashChanged() {
console.log(window.location.toString())
};
window.onhashchange = locationHashChanged;
この構成で同じ実験 (1)、(2)、(3)、(4) を行いました。事実上、以前の履歴のすべての URL パスが逆順で出力されました。たとえば (3) では、[戻る] ボタンを押しているときに、最初に 'second' の URL が出力され、次に 'root' の URL が出力されます。したがって、バックボーンの動作は実際には「onhashchange」の動作です。
私の質問は:
この動作の理由はどれですか (何に役立ちますか)? たとえば、コールバックがビューのみを切り替える場合、例 (4) では、ビューを 1 回だけ切り替える必要があるのに、ビューを 4 回切り替えています (「秒」で表示されるビューを「ルート」で表示されるビュー)。この動作を取得する方法はありますか?
前もって感謝します!