Pour ceux qui connaissent Ruby on Rails, un petit truc très pratique dans la partie contrôleur est le before_filter récemment renommé en before_action à partir de la version 4. Cette fonction permet de pouvoir exécuter des fonctions avant chaque passage dans une action d’un contrôleur. Plus de détails ici.
En gros c’est super pratique.
Récemment j’ai eu à faire un projet où j’ai utilisé Bakbone.js et je voulais dans mes routes avoir un comportement similaire. Résultat c’est simple, faire un petit héritage de Backbone.Router et utiliser cet objet dans lequel on redéfini la fonction route comme ceci.
class BackboneOverrides.Router extends Backbone.Router route: (route, name, callback) -> route = this._routeToRegExp route if not _.isRegExp route callback = @[name] if not callback Backbone.history.route route, _.bind((fragment) -> args = this._extractParameters route, fragment can_go = true if @actions? for action in @actions(name) can_go = can_go and this[action].apply(this, args) if can_go callback and callback.apply this, args this.trigger.apply this, ['route:' + name].concat(args) Backbone.history.trigger 'route', this, name, args , this) @ actions: (name) -> for action, list of @before_action when _.indexOf(list, name) isnt -1 action |
avec la fonction actions qui permet de récupérer toutes les actions à faire pour cette route donnée
Simple non
Une fois que c’est fait il ne vous reste plus qu’a mettre dans votre/vos fichier(s) qui contiennent vos routes une petite map avec la fonction a déclencher à chaque fois qu’une route est appelée
class MyRouter extends BackboneOverrides.Router before_action: "do_something_awesome": ["new", "show"] routes: "nouveau": "new" ":id": "show" |
Ici, à chaque fois que les actions new, show, index et edit seront appelées la fonction do_something_awesome sera appelée avant et permettra à l’aide d’un booléen retourné d’accéder ou non à la page.
Voilà en tout cas c’est pas mal pratique et ça permet d’éviter de nombreux copier collé dans certains cas
Tags: backbone.js, before_action, coffee-script, router