Note that there are some explanatory texts on larger screens.

plurals
  1. PO'action' in Ember not calling the controller method
    primarykey
    data
    text
    <p>I converted this Ember Rails app <a href="https://github.com/kagemusha/ember-rails-devise-demo" rel="nofollow">https://github.com/kagemusha/ember-rails-devise-demo</a> from coffeescript to javascript. The login and registration actions in the AuthController work perfectly when I click the links, however, when I click the logout button, I'm getting an error that nothing handled the logout event, even though there's an action setup to do it in the same controller as the other two links.</p> <pre><code>Uncaught Error: Nothing handled the event 'logout'. {{view App.MenuItem href="#/login" label="Login" }} {{view App.MenuItem href="#/registration" label="Register"}} &lt;button class="btn" {{action logout}}&gt;Logout&lt;/button&gt; </code></pre> <p>Can you see why the logout action in the AuthController might not be handling the event. It works in the coffeescript version. </p> <p>Update, there is a App.NavbarController that extends the ObjectController and wraps the logout in an action hash. </p> <p>Navbar Controller</p> <pre><code> App.NavbarController = Ember.ObjectController.extend({ needs: ['auth'], isAuthenticated: Em.computed.alias("controllers.auth.isAuthenticated"), actions: { logout: function() { return this.get("controllers.auth").logout(); } } }); </code></pre> <p>Authentication controller</p> <pre><code>App.AuthController = Ember.ObjectController.extend({ currentUser: null, isAuthenticated: Em.computed.notEmpty("currentUser.email"), login: function(route) { var me; me = this; return $.ajax({ url: App.urls.login, type: "POST", data: { "user[email]": route.currentModel.email, "user[password]": route.currentModel.password }, success: function(data) { log.log("Login Msg " + data.user.dummy_msg); me.set('currentUser', data.user); return route.transitionTo('home'); }, error: function(jqXHR, textStatus, errorThrown) { if (jqXHR.status === 401) { return route.controllerFor('login').set("errorMsg", "That email/password combo didn't work. Please try again"); } else if (jqXHR.status === 406) { return route.controllerFor('login').set("errorMsg", "Request not acceptable (406): make sure Devise responds to JSON."); } else { return p("Login Error: " + jqXHR.status + " | " + errorThrown); } } }); }, register: function(route) { var me; me = this; return $.ajax({ // url: App.urls.register, url: "/users.json", type: "POST", data: { "user[name]": route.currentModel.name, "user[email]": route.currentModel.email, "user[password]": route.currentModel.password, "user[password_confirmation]": route.currentModel.password_confirmation }, success: function(data) { me.set('currentUser', data.user); return route.transitionTo('home'); }, error: function(jqXHR, textStatus, errorThrown) { return route.controllerFor('registration').set("errorMsg", "That email/password combo didn't work. Please try again"); } }); }, logout: function() { var me; console.log("Logging out..."); me = this; return $.ajax({ url: App.urls.logout, type: "DELETE", dataType: "json", success: function(data, textStatus, jqXHR) { $('meta[name="csrf-token"]').attr('content', data['csrf-token']); $('meta[name="csrf-param"]').attr('content', data['csrf-param']); log.info("Logged out on server"); me.set('currentUser', null); return me.transitionToRoute("home"); }, error: function(jqXHR, textStatus, errorThrown) { return alert("Error logging out: " + errorThrown); } }); } }); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload