Возможно ли иметь дополнительные параметры в маршруте Backbone.js?
например:
routes:
"search/[:query]": "searchIndex"
вместо:
routes:
"search/": "searchIndex"
"search/:query": "searchIndex"
Возможно ли иметь дополнительные параметры в маршруте Backbone.js?
например:
routes:
"search/[:query]": "searchIndex"
вместо:
routes:
"search/": "searchIndex"
"search/:query": "searchIndex"
В соответствии с базой 0.9.9 вы можете добавить необязательные параметры с круглыми скобками.
Например, в объекте маршрутов вы можете определить необязательную часть маршрута, например:
routes: {
"organize(/:action)": "displayOrganize"
}
Теперь путь URL будет соответствовать /#organize и маршрутам, как /#organize/create.
Имейте в виду, что если вам нужны маршруты, такие как /#organize/ (с завершающей косой чертой), вы можете сделать:
routes: {
"organize(/)(:action)": "displayOrganize"
}
Вероятно, самый простой способ - объявить более одного маршрута, один с дополнительным аргументом, без него:
routes:{
"authProxy/:hash": "authProxy",
"authProxy/:hash/:url": "authProxy"
}
то просто проверьте их в своем методе:
authProxy: function(hash, url){
if (url){
// Hash and URL.
}else{
// Just hash.
}
}
Обратите внимание, что мне это нравится намного лучше, чем два других ответа, потому что другим разработчикам очень легко понять, что происходит.
Вы можете вручную добавлять маршруты, основанные на регулярном выражении, с помощью метода route:
маршрут
router.route(route, name, [callback])Вручную создать маршрут для маршрутизатора, аргументом
routeможет быть строка маршрутизации или регулярное выражение. Каждый соответствующий захват из маршрута или регулярного выражения будет передан в качестве аргумента для обратного вызова.
Итак, что-то вроде этого должно работать:
this.route(/^search\/(.*)?/, 'searchIndex');
Тогда searchIndex будет вызываться с вашим ничем или вашим :query в качестве аргумента.
Недостатком является то, что вы не можете вводить маршруты регулярных выражений в ваш объект routes. Вы можете добавить все свои маршруты с помощью route внутри вашего маршрутизатора initialize, если хотите сохранить их все вместе.
Как насчет использования *splat:
маршруты
router.routesМаршруты хеш отображают URL-адреса с параметрами для функций на вашем маршрутизаторе, аналогично хешам Просмотр событий. Маршруты могут содержать части параметров,
:param, которые соответствуют одному URL-компоненту между слэшами; и splat*splat, которые могут соответствовать любому количеству компонентов URL.Например, маршрут
"search/:query/p:page"будет соответствовать фрагменту#search/obama/p2, передав"obama"и"2"в действие. Маршрут"file/*path"будет соответствовать#file/nested/folder/file.txt, передав"nested/folder/file.txt"в действие.