I'm making an application with Ember.js. It's a little quiz in which questions are shown with pictures and meanwhile played in an audioplayer, one after another. When a question has been answered, the next question is shown by transitioning to the questionRoute with the next question as a model. 

To prevent the user from using the browser-backbutton, I check if a question is already finished in the redirect function from my question route. In that case I transition them back to the next question.

That works, but the function setupController still gets executed for the finished question which i've just redirected. This results in the problem that the finished question gets played again in the audioplayer, and the new question gets played simultaneously.

Is there a way to prevent the route from further executing setupController() and renderTemplate() after its been redirected?

Now I use my own variable to see if the route has been redirected, but it feels like a hackish way and I'd like to now if there is a better way.

This is my code:

```
//question route

Player.QuestionRoute = Em.Route.extend({
    redirect: function(question){

        Player.Quiz.setCurrentQuestion(question);

        nextQuestion = Player.Quiz.getNextQuestion();

        if(question.get('finished') == true && nextQuestion != null) {
            this.transitionTo('question', nextQuestion);
            //hackish way to prevent the other functions from executing
            this.set('hasBeenRedirected', true);
            return;
        }

        //hackish way to prevent the other functions from executing
        this.set('hasBeenRedirected', false);

    }, 
    setupController: function(controller, model){
        //hackish way to prevent the other functions from executing
        if(this.get('hasBeenRedirected') == true) return;
        controller.set('content', model);

        /* do some other things */

        controller.startQuestion();
    },
    renderTemplate: function(controller, model) {
        //hackish way to prevent the other functions from executing
        if(this.get('hasBeenRedirected') == true) return;

        this.render('stage'); 
        this.render('dock', {
            outlet: 'dock'
        }); 

        this.render(model.getPreferredTemplate(), {
            into: 'stage',
            outlet: 'question'
        });

        this.render("quizinfo", {
            into: 'stage',
            outlet: 'quizinfo',
            controller: this.controllerFor('quiz', Player.Quiz),
        });

    },
    model: function(param){
        return Player.Quiz.getQuestionAt(param.question_id);
    }

});

```