Backbone routing filters

by rjzaworski

HTML

<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://documentcloud.github.com/backbone/backbone-min.js"></script>

JavaScript

// Monkey-patch Backbone.History
(function (History) {
var _navigate = History.prototype.navigate;

_.extend(History.prototype, {
    filter: function (fragment) {

        if (fragment == 'foobar') {
            console.log('foobar was hijacked');
            return true;
        }
    },
    navigate: function (fragment, options) {
        if (!this.filter(fragment)) {
            return _navigate.call(this, fragment, options);
        }
    }
});
})(Backbone.History);

// Demonstration router:
var MyRouter = Backbone.Router.extend({
    routes: {
        'foobar': 'foobar'
    },    
    foobar: function () {
        console.log('foobar is running.');    
    }
});

new MyRouter;

Backbone.history.start();
Backbone.history.navigate('foobar', { trigger: true });