3

次のシステム構成を使用しています。


バックボーン 0.5.3 を使用する Ubuntu 11.04 上の Chromium 14.0.835.202

次のルートとコールバックが定義されたバックボーン ルーター:

, routes: {

                  '': 'handlerRoot'

                , 'second': 'handlerSecond'
}

このシステムでは、次の動作をしています。


  1. 「ルート」(ホーム) にアクセスすると、「handlerRoot」が呼び出されます。わかりました、それは私が期待していたものでした。
  2. 'second' (#second) に移動すると、'handlerSecond' が呼び出されます。わかりました、それは私が期待していたものでした。
  3. 「root」にいて、次に「second」に移動し、そこで「戻る」ボタンをクリックすると、「戻る」ボタンを押した結果、2 つのコールバックが呼び出されます。最初は「handlerSecond」と呼ばれ、次の「handlerRoot」。ここで実際には、「handlerRoot」のみが呼び出されることを期待していました。ユーザーとして戻るボタンを押したときの意図は、前のページに戻ることでした。
  4. 次のパスを実行している場合: '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 回切り替えています (「秒」で表示されるビューを「ルート」で表示されるビュー)。この動作を取得する方法はありますか?

前もって感謝します!

4

1 に答える 1

1

編集: 複数の検索の後、Chromium にはコンソールに [戻る] ボタンのあるバグがあり、ルートは他のブラウザーのように 1 回だけトリガーされます。


あなたの問題を試すためにjsFiddleを作成しましたが、問題がわかりません。

これを Linux 10.04 の Chrome、Firefox、Opera でテストしましたが、何も問題はありませんでしたが、Chromium (15.0.874.106) には [戻る] ボタンにバグがあります。したがって、Chromium は Backbone JS の履歴オブジェクトを正しく解釈していないと思います。

ここで再度開くために、GitHub リポジトリの問題に回答しました: https://github.com/documentcloud/backbone/issues/646#issuecomment-3291944

于 2011-12-28T15:32:34.103 に答える