41 votes

Paramètre facultatif de la route Backbone.js

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"

91voto

Gabe H Points 535

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"
}

16voto

Mauvis Ledford Points 12424

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.

8voto

mu is too short Points 205090

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.

3voto

tkone Points 8216

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.com

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.

Powered by:

X