En utilisant Backbone, est-il possible pour moi d'obtenir le nom de l'itinéraire actuel? Je sais comment me lier aux événements de changement d'itinéraire, mais j'aimerais être en mesure de déterminer l'itinéraire actuel à d'autres moments, entre les changements.
backbone.js
Drew Dara-Abrams
la source
la source
Réponses:
Si vous avez instancié un routeur dans votre application, la ligne suivante renvoie le fragment actuel:
À partir de la documentation Backbone.js :
"[...] L'historique sert de routeur global (par image) pour gérer les événements de hachage ou pushState, faire correspondre la route appropriée et déclencher des rappels. Vous ne devriez jamais avoir à en créer un vous-même - vous devriez utiliser la référence à Backbone.history qui sera créé automatiquement pour vous si vous utilisez des routeurs avec des routes. [...] "
Si vous avez besoin du nom de la fonction liée à ce fragment, vous pouvez créer quelque chose comme ceci dans la portée de votre routeur:
Ou comme ceci depuis l'extérieur de votre routeur:
la source
Backbone.history.getFragment()
, carBackbone.history.fragment
c'est une propriété privée cachée.La réponse de Robert est intéressante, mais malheureusement elle ne fonctionnera que si le hachage est exactement comme défini dans l'itinéraire. Si, par exemple, vous avez une route pour
user(/:uid)
elle ne sera pas mise en correspondance si leBackbone.history.fragment
est l'un"user"
ou l' autre"user/1"
(qui sont les deux cas d'utilisation les plus évidents pour une telle route). En d'autres termes, il ne trouvera le nom de rappel approprié que si le hachage est exactement"user(/:uid)"
(hautement improbable).Comme j'avais besoin de cette fonctionnalité, j'ai étendu le
Backbone.Router
avec unecurrent
fonction qui réutilise une partie du code utilisé par l'objet History et Router pour faire correspondre le fragment actuel aux routes définies pour déclencher le rappel approprié. Pour mon cas d'utilisation, il prend le paramètre facultatifroute
, qui, s'il est défini sur quelque chose de véridique, renverra le nom de fonction correspondant défini pour l'itinéraire. Sinon, il retournera le fragment de hachage actuel deBackbone.History.fragment
.Vous pouvez ajouter le code à votre extension existante où vous initialisez et configurez le routeur Backbone.
Je suis sûr que certaines améliorations pourraient être apportées, mais c'est un bon moyen de vous lancer. En outre, il est facile de créer cette fonctionnalité sans étendre l'objet Route. Je l'ai fait parce que c'était le moyen le plus pratique pour ma configuration.
Je n'ai pas encore testé cela complètement, alors faites-moi savoir si quelque chose va au sud.
MISE À JOUR 25/04/2013
J'ai apporté quelques modifications à la fonction, donc au lieu de renvoyer le hachage ou le nom de rappel de la route, je renvoie un objet avec un fragment, des paramètres et une route afin que vous puissiez accéder à toutes les données de la route actuelle, un peu comme vous le feriez de la route- un événement.
Vous pouvez voir les changements ci-dessous:
Voir le code précédent pour plus de commentaires et d'explications, ils se ressemblent pour la plupart.
la source
_.find
fonction commethis
, éliminant ainsi le besoin de laRouter
variable (@DanAbramov l'a déjà fait).Marionette.AppRouter
, étendez votre routeur avec la fonction ci-dessus, mais remplacez-laRouter.appRoutes
parRouter.routes
.Pour obtenir l'itinéraire appelant (ou l'URL) du gestionnaire d'itinéraire appelé, vous pouvez l'obtenir en vérifiant
Je suis arrivé ici à la recherche de cette réponse, alors je suppose que je devrais laisser ce que j'ai trouvé.
la source
Si vous utilisez le paramètre racine du routeur, vous pouvez également l'inclure pour obtenir le «vrai» fragment.
la source
Voici une version un peu plus verbeuse (ou, selon votre goût, plus lisible) de la réponse de Simon :
la source
Si vous regardez la source pour le
Router
, vous verrez que lorsque le routeur déclenche l'événement disant que quelque chose change, il passe le nom avec lui comme "route: nom".http://documentcloud.github.com/backbone/docs/backbone.html#section-84
Vous pouvez toujours accrocher l'événement "route" sur le routeur et le stocker pour obtenir l'itinéraire actuel.
la source
route
événement si cetrigger
n'est pas le castrue
(recommandé et par défaut).