web-dev-qa-db-fra.com

Paramètre facultatif de route Backbone.js

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"
41
TTT

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"
}
90
Gabe H

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.

16
Mauvis Ledford

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.

8
mu is too short

Qu'en est-il de l'utilisation du *splat:

itinérairesrouter.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.

3
tkone