Есть ли способ поймать все несогласованные маршруты с помощью Backbone?
Я хочу иметь маршрут "catch all", который запускается, когда ни один из других определенных маршрутов не сопоставляется. Тип обработчика ошибок 404 NotFound.
Я попытался добавить это, что работает, но предотвращает сопоставление других маршрутов:
this.route(/(.*)/, 'notFound', this.notFound);
Кто-нибудь решил эту проблему раньше?
Ответы
Ответ 1
Отвечая на вопрос об полноте.
Вы можете сделать это двумя способами. Определите регулярное выражение, используя route()
, как в вопросе. Однако из-за этой ошибки вам нужно будет определить все ваши маршруты с помощью метода route()
и в обратном порядке (вверху). Это предотвращает использование хэшей маршрутов, поэтому (мой) предпочтительный метод:
routes: {
'users/search': 'searchUsers',
'users/:id': 'loadUser',
'*notFound': 'notFound'
}
Ключ '*notFound'
может фактически быть чем угодно, начиная с *
. Для предотвращения ошибки синтаксического анализа вам просто требуются символы после *
.
Ответ 2
Там другой, возможно более простой/более элегантный способ решить эту проблему. Backbone.History.start()
возвращает true или false на основании того, соответствует ли он маршруту или нет. Итак, если вы просто выполните:
if (!Backbone.history.start()) router.navigate('404', {trigger:true});
вместо обычного:
Backbone.History.start();
он будет иметь тот же эффект, что и другие ответы.
Ответ 3
Этот очень маленький плагин выполняет свою работу: https://github.com/STRML/backbone.routeNotFound
Это самый элегантный и надежный способ решения этой проблемы, который я нашел до сих пор, однако, пожалуйста, имейте в виду, что, используя это, вы возитесь с внутренними компонентами Backbone.
Ответ 4
Без примера вашего текущего кода маршрутизации я бы предположил, что ваш поймать весь маршрут - последний маршрут, который должен работать для вас
Ответ 5
Просто добавьте его в качестве последнего маршрута в списке. Таким образом, это будет соответствовать только резервному варианту.
Ответ 6
Я думаю, что это не должно пройти JavaScript для решения, должен быть язык для решения, например php. При обработке на стороне сервера слов, если у вас есть условие, вы можете отвечать голосом с номером ошибки 404