Подтвердить что ты не робот

Есть ли способ поймать все несогласованные маршруты с помощью Backbone?

Я хочу иметь маршрут "catch all", который запускается, когда ни один из других определенных маршрутов не сопоставляется. Тип обработчика ошибок 404 NotFound.

Я попытался добавить это, что работает, но предотвращает сопоставление других маршрутов:

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

Кто-нибудь решил эту проблему раньше?

4b9b3361

Ответ 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