41

I want to have a 'catch all' route which runs when none of the other defined routes are matched. A type of 404 NotFound error handler.

I've tried adding this, which works but prevents other routes from matching:

this.route(/(.*)/, 'notFound', this.notFound);

Anyone solved this problem before?

4

7 に答える 7

83

完全を期すためにここで答えます。

これには 2 つの方法があります。質問のように、を使用して正規表現を定義しroute()ます。ただし、このバグroute()のため、メソッドを介してすべてのルートを逆の順序で定義する必要があります(一番上にキャッチオール)。これにより、ルートハッシュを使用できなくなるため、(私の)推奨方法は次のとおりです。

routes: {
  'users/search': 'searchUsers',
  'users/:id': 'loadUser',

  '*notFound': 'notFound'
}

キー'*notFound'は、実際には で始まるものであれば何でもかまいません**解析エラーを防ぐために、の後に文字が必要です。

于 2012-06-28T02:17:47.353 に答える
2

この非常に小さなプラグインがその役割を果たします: https://github.com/STRML/backbone.routeNotFound

これは、私がこれまでに見つけたこの問題を解決するための最もエレガントで堅牢な方法ですが、これを使用すると、Backbone の内部をいじることになることに注意してください。

于 2015-07-02T19:09:24.913 に答える
1

現在のルーティングコードの例がなければ、キャッチオールルートが最後のルートであることを確認することがうまくいくと思います

于 2012-06-28T00:04:06.927 に答える
0

リストの最後のルートとして追加するだけです。そうすれば、フォールバック オプションとしてのみ一致します。

于 2012-06-27T23:59:24.667 に答える
-18

これは解決するためにJavaScriptを渡すべきではなく、解決する言語、たとえばphp. 単語のサーバー側の処理では、条件が整っている限り、エラー番号 404 でヘッドを応答できます。

于 2012-06-28T00:02:03.513 に答える