Est-il possible d'avoir des paramètres optionnels dans une route Backbone.js?
par exemple ceci:
routes:
"search/[:query]": "searchIndex"
au lieu de:
routes:
"search/": "searchIndex"
"search/:query": "searchIndex"
Depuis Backbone 0.9.9, vous pouvez ajouter des paramètres facultatifs avec des parenthèses.
Par exemple, dans votre objet routes, vous pouvez définir une partie d'itinéraire facultative comme celle-ci:
routes: {
"organize(/:action)": "displayOrganize"
}
Maintenant, le chemin de l'url correspondra à /#organize
et des itinéraires comme /#organize/create
.
N'oubliez pas que si vous avez besoin d'itinéraires comme /#organize/
(avec une barre oblique) pour être reconnu, vous pouvez faire:
routes: {
"organize(/)(:action)": "displayOrganize"
}
La façon la plus simple est probablement de déclarer plus d'une route, une avec l'argument supplémentaire, une sans:
routes:{
"authProxy/:hash": "authProxy",
"authProxy/:hash/:url": "authProxy"
}
puis vérifiez-les dans votre méthode:
authProxy: function(hash, url){
if (url){
// Hash and URL.
}else{
// Just hash.
}
}
Notez que j'aime beaucoup mieux que les deux autres réponses car il est très facile pour un autre développeur de comprendre ce qui se passe.
Vous pouvez ajouter des routes basées sur des expressions rationnelles manuellement en utilisant la méthode route
:
route
router.route(route, name, [callback])
Créez manuellement une route pour le routeur. L'argument
route
peut être une chaîne de routage ou une expression régulière. Chaque capture correspondante de la route ou de l'expression régulière sera transmise en tant qu'argument au rappel.
Donc, quelque chose comme ça devrait fonctionner:
this.route(/^search\/(.*)?/, 'searchIndex');
searchIndex
serait alors appelé avec votre rien ou votre :query
comme argument.
L'inconvénient est que vous ne pouvez pas mettre des routes d'expression régulière dans votre objet routes
. Vous pouvez ajouter tous vos itinéraires avec route
dans la méthode initialize
de votre routeur si vous souhaitez les garder tous ensemble.
Qu'en est-il de l'utilisation du *splat
:
itinéraires
router.routes
Le hachage des routes mappe les URL avec des paramètres aux fonctions de votre routeur, similaires au hachage des événements de View. Les routes peuvent contenir des parties de paramètres,
:param
, qui correspond à un seul composant URL entre les barres obliques; et éclaboussures*splat
, qui peut correspondre à n'importe quel nombre de composants d'URL.Par exemple, une route de
"search/:query/p:page"
correspondra à un fragment de#search/obama/p2
, qui passe"obama"
et"2"
à l'action. Un itinéraire de"file/*path"
correspondra à#file/nested/folder/file.txt
, qui passe"nested/folder/file.txt"
à l'action.