backbonejs で書かれた単一ページの Web アプリケーションがあります。私は異なるルートを使用しており、各ルートはコントローラーに対応しています。アプリのルート URL (myapp.com/) またはパラメーターのないルート以外の URL (myapp.com/somelocation) を読み込むと、正しく動作します。しかし、クエリ パラメータ (つまり、myapp.com/somelocation?z=search) を使用してアプリを任意の場所に直接ロードしようとすると、問題が発生します。アプリは 2 回レンダリングされます。1 回目は myapp.com/somelocation?z=search に対応する正しいコントローラーで、2 回目は myapp.com/somelocation に対応するコントローラーでレンダリングされます。
ルート テーブルは次のようになります。
routes: {
'login': 'login',
'home': 'home',
'timeline?*query': 'timelineWithQuery',
'timeline': 'timeline',
...
'*path': 'defaultRoute'
}, ...
コントローラーは次のようになります。
defaultRoute: function() {
router.navigate('home', {trigger: true});
},
login: function(args) {
var controller = new App.PageController.Mobile.AuthPageController($('body'));
controller.executeLogin(args);
},
timeline: function(args) {
var controller = new App.PageController.Mobile.TimelinePageController($('body'));
controller.executeTimeline(args);
}, ...
Document.ready スクリプトは次のようになります。
// ...
router.navigate(window.location, {trigger: true});
// ...
router.navigate(window.location, {trigger: true}); を呼び出さない場合 明示的に、アプリケーションの開始ページをレンダリングするコントローラーはありません。myapp.com/timeline?foo=bar URLから開始しようとするまで、アプリを呼び出すと正しく動作します。これを行うと、アプリが 2 回レンダリングされます (ページのリロードなし)。
助言がありますか?ルーティング シナリオが豊富な backbonejs 駆動のシングル ページ アプリの一般的な document.ready ブートストラップ パターンは何ですか?