Before_action avec Backbone.js

By antho1404 • work • 15 Feb 2013

routes
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: , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>