Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
backbone.blazer
Advanced tools
A better router for Backbone and Marionette applications
learn more here (presentation) and here (video)
bower install backbone.blazer
<script src='jquery.js'></script>
<script src='underscore.js'></script>
<script src='backbone.js'></script>
<script src='bower/path/to/backbone.blazer.js'></script>
<script src='app.js'></script>
In order to build a modularized routing system, we've extended and overriden a few parts of the core Backbone.Router
. This library attempts to be a mostly drop-in replacement for the normal Backbone router. However, we have removed a few things.
Backbone.Blazer.Router
still supports the usual way of routing in a Backbone application: mapping a regexp to a callback. However, we've gone ahead and added a new way of configuring your routes: Backbone.Blazer.Route
.
Blazer's router supports all the familiar configuration of Backbone.Router
var MyRouter = Backbone.Blazer.Router.extend({
routes: {
'regular-old-route': function(routeData) {
// do whatever you want
}
}
});
In addition to the old way of routing, Blazer provides a new strategy: using a Route
object.
var MyRouter = Backbone.Blazer.Router.extend({
routes: {
'new-hot-route': new HotRoute()
}
});
var HotRoute = Backbone.Blazer.Route.extend({
execute: function(routeData) {
// the code that would normally go in your router callback can now go here
}
});
Route
objects can do more than just view rendering. Route
objects can also be configured to perform asynchronous actions before rendering your views (or really before calling your execute
method).
For example, here's a route that loads some data from some Backbone Model before rendering a view:
var LoadSomeDataRoute = Backbone.Blazer.Route.extend({
prepare: function(routeData) {
routeData.someData = new SomeData();
return routeData.someData.fetch();
},
execute: function(routeData) {
App.getRegion('main').show(new SomeDataView({ model: routeData.someData }));
}
});
The Blazer router expects the prepare
method to return a promise. If the promise is resolved as a success, then the execute
method is called; otherwise, the route's error
method is called (if provided).
Both Router
and Route
objects can define filters that run before and after a route is invoked.
Filters are specified as an array of objects, where each object has a beforeRoute
and/or afterRoute
functions.
var FilteredRoute = Backbone.Blazer.Route.extend({
filters: [{
beforeRoute: function() {
// I run before my prepare() method is called
},
afterRoute: function() {
// I run after my execute() method is called
}
}]
});
var Router = Backbone.Blazer.Router.extend({
routes: {
'route1': new FilteredRoute(),
'route2': new OtherRoute()
},
filters: [{
beforeRoute: function() {
// I run before prepare() is called on all routes
},
afterRoute: function() {
// I run after execute() is called on all routes
}
}]
});
Filters will run in the order they are sepcified in the filters
array. A filter that needs to do some asynchronous work can return a promise and the next filter in the chain will not be run until that promise is resolved. Because of this, it is safe to mix filters that do synchronous work with filters that do asynchronous work.
Filters on a Router
object will be run for all Route
objects on that router. When invoking a specific route, the router's filters will all run before filters on the route in question are run.
If a filter returns a promise and that promise is rejected or simply never resolves, the filter chain will stop executing and subsequent filters in the chain will not be invoked. In the case of before filters the prepare()
function will never be invoked.
You can stop redirect to another route at any point during route invokation. Doing this will stop execution of the current route. For instance, if a beforeRoute
filter redirects then prepare
and execute
will not be invoked for the current route. Similarly, if prepare
redirects then execute
will not be invoked for the current route.
var Route = Backbone.Blazer.Route.extend({
filters: [{
beforeRoute: function() {
if (somethingBadHappened()) {
return this.redirect('another_route');
}
}
}]
});
Backbone.Blazer.Router
before:execute
, with payload [routeData]
. this is the first thing that happens when processing a route.after:execute
, with payload [routeData]
. this is the last thing called when processing a route. only called if execute was actually called.error
, with payload [routeData, argsFromRejectedPromise]
The router accepts the same parameters as the normal Backbone.Router
.
The entries in the routes
hash can contain any of the following:
function(routeData) {}
function(routeData) {}
Backbone.Blazer.Route
objectBackbone.Blazer.Route
before:execute
, with payload [routeData]
. this is the first thing that happens when processing a route.after:execute
, with payload [routeData]
. this is the last thing called when processing a route. only called if execute was actually called.#prepare(routeData)
#execute(routeData)
#prepare
resolves to success#error(routeData, argumentsFromRejectedPromise)
#prepare
resolves to failuretrue
will prevent the router from bubbling the error back up through itself to the application.#redirect(fragment)
beforeRoute
, afterRoute
, prepare
, execute
or error
function and execution for this route will stop immediately and a new route corresponding to the provided fragment will be invoked.--
Any contributions made to this project are covered under the MIT License, found here
FAQs
a more powerful router for Backbone and Marionette
We found that backbone.blazer demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.