Ember Conditional Transitions

by alexchetv

HTML

<script src="http://cloud.github.com/downloads/wycats/handlebars.js/handlebars-1.0.0.beta.6.js"></script>
<script src="http://cloud.github.com/downloads/emberjs/ember.js/ember-latest.js"></script>
<script type="text/x-handlebars">
</script>

JavaScript

var transitionAfterConfirmation = function(target){
    var defaultEvent = Ember.Route.transitionTo(target),
        event = function(stateManager, context){
            if( confirm("Really go?")){
                defaultEvent(stateManager,context);
            }
        };
    
    event.transitionTarget = target;
    
    return event;
};


App = Ember.Application.create({
    Router: Ember.Router.extend({
        root: Ember.Route.extend({
            index: Ember.Route.extend({
                route: '/',
                redirectsTo: 'stateA'
            }),
            
            gotoA: transitionAfterConfirmation('stateA'),
            gotoB: transitionAfterConfirmation('stateB'),
            
            stateA: Ember.Route.extend({
                route: '/a',
                enter: function(){ alert('in A'); }
            }),
            stateB: Ember.Route.extend({
                route: '/b',
                enter: function(){ alert('in B'); }
            })
        })
    })
});

App.ApplicationController = Ember.Controller;
App.ApplicationView = Ember.View;

$( function(){
    App.initialize();
});

setTimeout( function(){
    App.get('router').send('gotoB');
}, 500);