Mn: Using Controllers

by kyllle

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.2/backbone-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.marionette/2.4.3/backbone.marionette.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css">
<nav>
	<a href="/" class="js-link">Home</a>
	<a href="/about" class="js-link">About</a>
	<a href="/contact" class="js-link">Contact</a>
</nav>

CSS

@import url(http://fonts.googleapis.com/css?family=Roboto:300,400,500);

* {
  -webkit-font-smoothing: antialiased;
}

body {
    font-family: Roboto;
    padding: 16px;
    line-height: 1.5;
    font-weight: normal;
    color: #ccc;
    background: #292929;
    font-size: 18px;
}

h1, h2, h3 {
    font-weight: normal;
}

.pg-heading {
    margin-bottom: 0;
}

a {
    color: #95baf6;
    transition: opacity .3s;
	
	&:hover {
    	opacity: 0.75;
	}
}

JavaScript

console.clear();

var Controller = Marionette.Object.extend({
	
	showHome: function() {
		console.log('Running Home Controller');									
	},
	
	showAbout: function() {
		console.log('Running About Controller');								
	},
	
	showContact: function() {
		console.log('Running Contact Controller');
	}
	
});

// Create a router
var router = new (Marionette.AppRouter.extend({
	
	appRoutes: {
		'': 'showHome',
		'about': 'showAbout',
		'contact': 'showContact'
	},
		
	controller: new Controller()
}));

(function() {	
	Backbone.history.start();
	
	$('.js-link').on('click', function(event) {
		event.preventDefault();
													
		var $clickedEl = $(event.currentTarget),
        	clickedHref = $clickedEl.attr('href');
			
        router.navigate(clickedHref, {trigger:true});						
	});
})();