Skip to content

Instantly share code, notes, and snippets.

@robdodson
Created May 21, 2012 17:15
Show Gist options
  • Save robdodson/2763374 to your computer and use it in GitHub Desktop.
Save robdodson/2763374 to your computer and use it in GitHub Desktop.
backbone-boilerplate-main.js
require([
"namespace",
// Libs
"jquery",
"use!backbone",
// Modules
"modules/example"
],
function(namespace, $, Backbone, Example) {
// Defining the application router, you can attach sub routers here.
var Router = Backbone.Router.extend({
routes: {
"": "index",
":hash": "index",
"search": "search"
},
index: function(hash) {
var route = this;
var tutorial = new Example.Views.Tutorial();
// Attach the tutorial to the DOM
tutorial.render(function(el) {
$("#main").html(el);
// Fix for hashes in pushState and hash fragment
if (hash && !route._alreadyTriggered) {
// Reset to home, pushState support automatically converts hashes
Backbone.history.navigate("", false);
// Trigger the default browser behavior
location.hash = hash;
// Set an internal flag to stop recursive looping
route._alreadyTriggered = true;
}
});
},
search: function() {
var search = new Example.Views.Search();
search.render(function(el) {
$("#main").html(el);
});
}
});
// Shorthand the application namespace
var app = namespace.app;
// Treat the jQuery ready function as the entry point to the application.
// Inside this function, kick-off all initialization, everything up to this
// point should be definitions.
$(function() {
// Define your master router on the application namespace and trigger all
// navigation from this instance.
app.router = new Router();
// Trigger the initial route and enable HTML5 History API support
Backbone.history.start({ pushState: true });
});
// All navigation that is relative should be passed through the navigate
// method, to be processed by the router. If the link has a data-bypass
// attribute, bypass the delegation completely.
$(document).on("click", "a:not([data-bypass])", function(evt) {
// Get the anchor href and protcol
var href = $(this).attr("href");
var protocol = this.protocol + "//";
// Ensure the protocol is not part of URL, meaning its relative.
if (href && href.slice(0, protocol.length) !== protocol &&
href.indexOf("javascript:") !== 0) {
// Stop the default event to ensure the link will not cause a page
// refresh.
evt.preventDefault();
// `Backbone.history.navigate` is sufficient for all Routers and will
// trigger the correct events. The Router's internal `navigate` method
// calls this anyways.
Backbone.history.navigate(href, true);
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment