3

これは簡単な質問ですが、私はルーティングが初めてで、これに対する答えを見つけることができませんでした。

私はマリオネット ルーターを持っています (恐縮ですが、バックボーン ルーターと同じものです。非常に単純です)。

sys.routes = {
  "app/:id": "onAppRoute",
};

sys.Router = new Marionette.AppRouter({
  controller: {
    onAppRoute: function(route) {
      console.log('Called app route!');
    },
  },
  appRoutes: sys.routes,
});

Backbone.history.start({pushState: true})  

これは機能します。ブラウザの戻るボタンを押すと、シングル ページ アプリケーション内で URL が変更され、onAppRoute関数が呼び出されます。

ただし、新しいブラウザ ウィンドウを開いて、ページの URL を特定の「アプリ」に貼り付けたとします。

http://localhost/app/myApplication

これは関数を呼び出しませんonAppRoute。しかし、そうあるべきだとは思えませんが、私には本当にわかりません。

したい。

間違っているのか、ページの読み込み時にページの URL を取得して解析し、そのルートに「移動」して手動で起動する必要があるのか​​ わかりません。ハッキーなようです。

4

2 に答える 2

3

直感に反して、バックボーンのデフォルトの動作は、ページの読み込み時に一致するルートをトリガーすることです! 参照。http://backbonejs.org/#Router - オプションを探しますsilent: true。ルーターがページの読み込み時に一致するルートを無視するように指定する必要があります。つまり、対応するコールバックをトリガーしません。

したがって、問題は別の場所にあります。ルートは、例として述べたURLと一致しません。:id明らかに、パラメータ末尾が必要ですhttp://localhost/app/myApplication。したがって、にオプションとしてhttp://localhost/app/myApplication/213渡さなかった場合、ページの読み込み時にコールバックがトリガーされます。silent: truebackbone.history.start()

「ルート」URL に一致させたい場合、つまりパラメーターを指定しない場合は、次のルートを定義します。

routes: {
    '/': someFunction
}
于 2013-10-10T10:48:32.203 に答える
0

:id 部分はパラメータで、Backbone.Router によって抽出され、引数として onAppRoute に送信されます。しかし、あなたの URL にはパラメータ /localhost/app/myApplication がありません

于 2013-10-10T01:38:17.707 に答える