Я заметил небольшую причуду в приложении Backbone, которое я создаю, и мне было интересно, следует ли ожидать такого поведения или я делаю что-то не так ...
Я запускаюBackbone.history примерно так:
Backbone.history.start({
root: '/au/store/',
pushState: true,
silent: true
});
Чтобы сделать навигацию по кнопкам навигации назад / вперед, мне нужно настроить их следующим образом:
router = Backbone.Router.extend({
routes: {
'au/store/:slug' : 'slug',
'au/store/?*params' : 'params'
}
});
И это прекрасно работает.Переход по истории браузера к /au/store/?foo=bar
запускает маршрут «params», как и ожидалось.
Проблема, с которой я столкнулся, заключается в том, что router.navigate()
не вызывает маршруты:
router.navigate('?foo=bar', {trigger:true}); // route doesn't trigger
Добавление корня к URL-адресу также не работает:
router.navigate('au/store/?foo=bar', {trigger:true}); // navigates to /au/store/au/store/?foo=bar
Так что обходной путь, который я использую в данный момент, состоит в том, чтобы запустить все маршруты дважды, один раз с префиксом root и один раз без:
routes: {
'au/store/:slug' : 'slug',
'au/store/?*params' : 'params',
':slug' : 'slug',
'?*params' : 'params'
}
И теперь он запускает маршруты назад / вперед, а также через router.navigate ().
Но это похоже на хакерство и наверняка вызовет проблемы в будущем с более сложными маршрутами ...
Может кто-нибудь объяснить мне, что я делаю неправильно, или почемуне ведет себя так, как я этого ожидаю?