Возможно ли иметь дополнительные параметры в маршруте 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"
в действие.