Est-il possible d'avoir des paramètres facultatifs dans une route Backbone.js ?
Par exemple, ceci :
routes:
"search/[:query]": "searchIndex"
au lieu de :
routes:
"search/": "searchIndex"
"search/:query": "searchIndex"
Est-il possible d'avoir des paramètres facultatifs dans une route Backbone.js ?
Par exemple, ceci :
routes:
"search/[:query]": "searchIndex"
au lieu de :
routes:
"search/": "searchIndex"
"search/:query": "searchIndex"
Depuis la version 0.9.9 de Backbone, vous pouvez ajouter des paramètres facultatifs à l'aide de parenthèses.
Par exemple, dans votre objet routes, vous pouvez définir une partie facultative de la route comme ceci :
routes: {
"organize(/:action)": "displayOrganize"
}
Maintenant le chemin de l'url correspondra /#organize
et des routes comme /#organize/create
.
Gardez à l'esprit que si vous avez besoin de routes comme /#organize/
(avec une barre oblique de fin) pour être reconnu, vous pouvez le faire :
routes: {
"organize(/)(:action)": "displayOrganize"
}
Le moyen le plus simple est probablement de déclarer plusieurs routes, une avec l'arg supplémentaire, une sans :
routes:{
"authProxy/:hash": "authProxy",
"authProxy/:hash/:url": "authProxy"
}
alors il suffit de les vérifier dans votre méthode :
authProxy: function(hash, url){
if (url){
// Hash and URL.
}else{
// Just hash.
}
}
Notez que j'aime beaucoup mieux cette réponse que les deux autres, car il est très facile pour un autre développeur de comprendre ce qui se passe.
Vous pouvez ajouter manuellement des routes basées sur l'expression rationnelle en utilisant le site route
méthode :
itinéraire
router.route(route, name, [callback])
Créer manuellement une route pour le routeur, Le
route
L'argument 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 passée comme argument à la callback.
Donc quelque chose comme ça devrait fonctionner :
this.route(/^search\/(.*)?/, 'searchIndex');
Entonces searchIndex
serait appelé avec votre rien ou votre :query
comme argument.
L'inconvénient est que vous ne pouvez pas mettre des routes regex dans vos routes
objet. Vous pourriez ajouter toutes vos routes avec route
dans l'interface de votre routeur initialize
méthode si vous vouliez les garder tous ensemble.
Et si vous utilisiez le *splat
:
itinéraires
router.routes
Le hachage des routes fait correspondre les URL avec des paramètres aux fonctions de votre routeur, de manière similaire au hachage des événements de la vue. Les routes peuvent contenir des parties de paramètres,
:param
qui correspondent à un seul composant URL entre les barres obliques ; et les parties splat*splat
qui peut correspondre à un nombre quelconque de composants d'URL.Par exemple, une route de
"search/:query/p:page"
correspondra à un fragment de#search/obama/p2
en passant"obama"
y"2"
à l'action. Une route de"file/*path"
correspondra à#file/nested/folder/file.txt
en passant"nested/folder/file.txt"
à l'action.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.