Search code examples
ember.jsember-simple-auth

Ember - How can I call the route's action from my controller


I'm using ember-simple-auth along with ember-validations to validate my user login credentials

in order to validate I "override" the login route's login action in controller.

The problem is that after validation I now wanna bubble up the action; however, since validate returns a promise I can't just simply return true.

I tried calling my route with this.get('target').send('login') but apparently it doesn't work. I tried this.send('login') but this creates an infinite loop as the controller calls itself recursively.


Solution

  • Just use a different action name in the controller and call login there

    actions: {
        validate: function() {
    
            var that = this;
            return this.validate().then(function() {
                that.send('login');
            }, function() {
                // report errors in an array
                var errors = that.get('errors');
                var fullErrors = [];
                Object.keys(errors).forEach(function(val) {
                    if(errors[val] instanceof Array)
                        errors[val].forEach(function(msg) {
                            fullErrors.push([val, msg].join(" "));
                        });
                });
                that.set('fullErrors',fullErrors);
            });
        },
        loginFailed: function(xhr) {
            this.set('errorMessage', xhr.responseText);
        }
    }