2013-04-18 3 views

Antwort

5

Ich habe mit dem gleichen Problem gekämpft. Ich habe den folgenden Hack erfolgreich implementiert.

window.App = Em.Application.extend 
    ready: -> 
    $(document).ajaxError((event, request, settings) => 
     if request.status == 401 && !["/profile", "https://stackoverflow.com/users/sign_in.json"].contains(settings.url) 
     controller = App.__container__.lookup('controller:application') 
     controller.transitionToRoute('sign_in') 
) 

Die Idee ist, ein jQuery ajaxError Ereignis zu fangen. Für den Fall, dass Sie die Art des Fehlers überprüfen können (z. B. request.status == 401), die URL, die den Fehler verursacht hat (z. B. settings.url), und basierend auf diesen Informationen können Sie entscheiden, was zu tun ist.

hoffe, das hilft

+3

Dies sollte nun, ähnlich wie dies durch den Router abgewickelt werden: http://stackoverflow.com/questions/17981563/ember -Datenhandling-401s –

0

Ich denke, eine bessere Möglichkeit, die Ember Versprechen zu verwenden ist:

@store.get("user").then(=> 
    # Success stuff here 
).fail(=> 
    @transitionTo("login") # Do other fancy error stuff here too 
) 

Das Problem dabei ist, dass es individuell auf allen Strecken getan werden müsste. Vielleicht könnten Sie etwas mit der Methode beforeTransition machen und überprüfen, was das Versprechen zurückgibt? Nur zum Nachdenken.

8

Ich recherchierte zum selben Thema und sieht aus wie die Informationen hier ist ein bisschen veraltet. Mit Ember 1.7.0 sollten Sie den Fehler in der Route behandeln. Wenn Sie dies für die gesamte App anwenden möchten, sollten Sie es zu Ihrem ApplicationRoute Klasse schreiben, so

// app/routes/application.js 
import Ember from 'ember'; 

var ApplicationRoute = Ember.Route.extend({ 
    actions: { 
     error: function (error, transition) { 
      // Handle the error here 
      if (error && error.status === 401) { 
       return this.transitionTo('login'); 
      } 
     } 
    } 
}); 

export default ApplicationRoute; 

Dies ist die gleiche Art und Weise ist, wie die Dokumentation beschreibt: read here

Update: In neuere Versionen von Ember und Ember Data, wird die Fehlerobjektstruktur ein wenig anders sein. Der Status wird eine Zeichenfolge sein, innerhalb eines Fehler-Objekt enthalten, innerhalb eines Arrays Fehler:

actions: { 
    error: function(error, transition) { 
    if (error.errors[0].status === '401') { 
     this.transitionTo('sign-in'); 
    } 
    } 
} 
Verwandte Themen