define([ 'backbone', 'js/programs/views/program_creator_view', 'js/programs/views/program_details_view', 'js/programs/models/program_model' ], function( Backbone, ProgramCreatorView, ProgramDetailsView, ProgramModel ) { 'use strict'; return Backbone.Router.extend({ root: '/program/', routes: { 'new': 'programCreator', ':id': 'programDetails' }, initialize: function( options ) { this.homeUrl = options.homeUrl; }, goHome: function() { window.location.href = this.homeUrl; }, loadProgramDetails: function() { this.programDetailsView = new ProgramDetailsView({ model: this.programModel }); }, programCreator: function() { if ( this.programCreatorView ) { this.programCreatorView.destroy(); } this.programCreatorView = new ProgramCreatorView({ router: this }); }, programDetails: function( id ) { this.programModel = new ProgramModel({ id: id }); this.programModel.on( 'sync', this.loadProgramDetails, this ); this.programModel.fetch(); }, /** * Starts the router. */ start: function () { if ( !Backbone.history.started ) { Backbone.history.start({ pushState: true, root: this.root }); } return this; } }); } );