2016-03-30 4 views
0

Nach einem benutzerdefinierten Aufruf Methode bei der Anmeldung Route authentifizieren, um die Aktion sessionAuthenticated auf der Anwendungsebene ausgelöst wird (ApplicationRouteMixin).Vorbelastungsdaten nach sessionAuthenticated bei Anwendung Route global

dh:

sessionAuthenticated() { 
    this._super(...arguments); 

    let _this = this; 
    return this_loadUser().catch(function() { 
     _this.get('session').invalidate(); 

    }); 

} 

Dies funktioniert jedoch, wenn ich zusätzliche Daten vorab zu laden möchten, sessionAuthenticated wartet nicht, bis alle Versprechen gelöst werden. Und da die beforeModel und afterModel Hooks bereits auf der Ebene der Anwendungsroute waren, funktioniert das nur zuverlässig beim Aktualisieren der Seite während der aktiven Sitzung (angemeldet), die die before-Model- und afterModel-Hooks aufruft.

Kurz gesagt; Wenn auf der Anmelde-Route, authenticate aufruft, wird nach erfolgreicher Authentifizierung die sessionAuthenticated-Aktion auf der Anwendungsroute ausgelöst, aber mit zusätzlichen Daten global geladen werden, auf der Ebene der Anwendungsroute. Die sessionAuthenticated wartet nicht, bis alle Versprechen abgeschlossen sind.

HINWEIS: Die Antwort ist korrekt, jedoch wird der Aufruf von Super nicht funktionieren, da Ember das Aufrufen von Super auf asynchronen Blöcken nicht unterstützt, nur synchron.

Antwort

1

Versuchen Sie, dies zu nennen._super nach wurde Ihr Versprechen erfüllt/abgelehnt. Etwas wie das:

sessionAuthenticated() { 
    let _this = this; 
    return this_loadUser().catch(function() { 
     _this.get('session').invalidate(); 
    }).finally(function() { 
     _this._super(...arguments); 
    }); 

} 
+0

Ja, das sollte funktionieren, aber nur auf halbem Weg. Das habe ich auch schon einmal probiert. Die Versprechen lösen sich auf, aber der Aufruf von _this._super() tut nichts. Die Lösung besteht darin, den für die sessionAuthenticated-Methode relevanten Code in den finally/then-Block zu kopieren, der den Übergang aufruft. Ich bin mir nicht sicher, warum der Aufruf von Super in diesem Fall nicht ausgeführt wird, komisch. Trotzdem ist Ihre Antwort nahe an der Antwort. – user3044258

+0

@ user3044258 In diesem Fall würde ich '_this._super.call (_this, ... arguments);' versuchen, ein korrektes 'this' an die übergeordnete Methode –

+0

zu übergeben. Ich fürchte, das funktioniert auch nicht. Unglücklicherweise unterstützt Ember das Aufrufen von Super bei asynchronen Blöcken nicht. Nur synchrone Blöcke werden unterstützt. – user3044258

Verwandte Themen