Skip to content

Instantly share code, notes, and snippets.

@randylien
Forked from juliocesar/awesome_router.coffee
Created May 21, 2012 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save randylien/2763632 to your computer and use it in GitHub Desktop.
Save randylien/2763632 to your computer and use it in GitHub Desktop.
AwesomeRouter: a cool Backbone.js router class
# AwesomeRouter: A class that I've been using throughout a few Backbone.js apps I've built.
#
# It adds 2 features: an event that gets fired when one calls `navigate` (aptly named
# "navigate"), so you can bind things to when a URL gets triggered. And a "before filter"
# method `before`, which you can use to run things before every a route gets triggered.
#
# This could easily be extended to have after filters too, or to only trigger a route
# upon @before returning something that's not false.
class AwesomeRouter extends Backbone.Router
initialize : ->
if _.isFunction(@before)
_super = Backbone.history.loadUrl
before = @before
router = @
Backbone.history.loadUrl = ->
before.call(router)
router.trigger 'navigate'
_super.apply(@, arguments)
# Usage:
class MyRouter extends AwesomeRouter
routes :
'/' : 'home'
before : ->
alert 'moo'
home : ->
console.log "Bet you saw me alert 'moo' just now"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment