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 });